Iphone ImageView和NSString变量在切换视图后重置
我正在设计一个iPhone程序,可以在一个视图中按下“自定义”圆形矩形按钮,显示不同的视图(我使用内置故事板上的模式连接在视图之间切换),从中可以自定义第一个视图上的背景。自定义屏幕(第二个屏幕)有多个按钮,用于选择使用以下代码的背景: ViewController.h:Iphone ImageView和NSString变量在切换视图后重置,iphone,ios,uiviewcontroller,background,uiimageview,Iphone,Ios,Uiviewcontroller,Background,Uiimageview,我正在设计一个iPhone程序,可以在一个视图中按下“自定义”圆形矩形按钮,显示不同的视图(我使用内置故事板上的模式连接在视图之间切换),从中可以自定义第一个视图上的背景。自定义屏幕(第二个屏幕)有多个按钮,用于选择使用以下代码的背景: ViewController.h: @interface{ ... IBOutlet UIImageView *backgroundImageTest; ... } ... @property (strong,nonatomic) NSString *b
@interface{
...
IBOutlet UIImageView *backgroundImageTest;
...
}
...
@property (strong,nonatomic) NSString *backgroundImageName;
@property (retain, nonatomic) IBOutlet UIImageView *backgroundImageTest;
...
- (IBAction)setJungleBackground:(id)sender {
backgroundImageName=@"jungle.png";
backgroundImageTest.image=[UIImage imageNamed:@"jungle.png"];
}
- (IBAction)setArcticBackground:(id)sender {
backgroundImageName=@"arctic.png";
backgroundImageTest.image=[UIImage imageNamed:@"arctic.png"];
}
ViewController.m:
@interface{
...
IBOutlet UIImageView *backgroundImageTest;
...
}
...
@property (strong,nonatomic) NSString *backgroundImageName;
@property (retain, nonatomic) IBOutlet UIImageView *backgroundImageTest;
...
- (IBAction)setJungleBackground:(id)sender {
backgroundImageName=@"jungle.png";
backgroundImageTest.image=[UIImage imageNamed:@"jungle.png"];
}
- (IBAction)setArcticBackground:(id)sender {
backgroundImageName=@"arctic.png";
backgroundImageTest.image=[UIImage imageNamed:@"arctic.png"];
}
对于每个可能的背景
同样在ViewController.m中:
- (void)viewDidLoad
{
if(!notFirstTime){
notFirstTime=YES;
...
backgroundImageName=@"white.png";
}
...
backgroundImageTest.image=[UIImage imageNamed:backgroundImageName];
...
[super viewDidLoad];
}
每次切换视图时,第一次布尔值将重置为“否”,背景将保持默认背景(@“white.png”)。如果我将@“white.png”替换为@“jungle.png”,背景可以工作,但不能切换到任何其他背景
两个视图都使用一个ViewController。到目前为止,除了这个小问题,它似乎工作得很好。我应该使用多个视图控制器吗?我不知道在什么情况下我应该这样做
此外,我不确定是否应该在变量的属性声明中使用retain或strong
我对iPhone编程比较陌生,任何建议都非常感谢
谢谢,
Alex在视图控制器实例化后调用viewDidLoad-看起来您正在不断地重新创建视图控制器实例。避免这种情况,然后使用ViewDidDisplay。听起来不错-如何避免创建视图控制器的多个副本,viewDidLoad和ViewDidDisplay之间有什么区别?我刚开始iPhone编程,坦率地说,我不知道ViewController在哪里实例化。@Alekxos它是在您调用
[[MyViewController alloc]init…]时实例化的。
。我已经解释了viewDidLoad的功能——看看苹果的文档。我将viewDidLoad代码移到了ViewDidDisplay,但没有任何改变。该错误是否可能是由于对两个视图使用一个控制器引起的?我不确定控制器如何知道viewDidLoad或ViewDidDisplay是哪个视图的意思。@Alekxos正如我所说,移动代码本身是不够的-您应该确保视图控制器的创建不会发生多次,只发生一次。我该怎么做?我在AppDelegate中搜索了[[MyViewController alloc]init…],但它不在那里-它会在其他地方吗?如果有关系的话,我用的是ARC。