我确实通过使用一个隐藏按钮从我的视图控制器到自身制作了一个 segue,然后是另一个制作 segue 的按钮。为了澄清起见,假设我想使用 segue 更改视图 bg 颜色。这里的问题是视图返回到它的第一个状态,就好像我再次运行它一样,因为它会经历 viewdidload 和 viewdidemerge 等等。有没有一种方法或解决方法可以利用它从我的观点的最后一个状态继续?
我需要向此代码添加什么,例如:
- (IBAction)changeColor:(id)sender {
[self performSegueWithIdentifier:@"changeC" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
ViewController* controller = [segue destinationViewController];
controller.view.backgroundColor = [UIColor blueColor];
}
>我什至不会问你为什么真的想这样做,但你可以有一个像 shouldReloadView 这样的布尔值,并在 prepareForSegue:
中将其设置为 NO。然后,在viewDidLoad
和viewWillAppear
内,只需在进行任何设置之前检查该 BOOL。
最好的方法是在头文件中添加一个颜色变量:
@property (nonatomic, strong) UIColor *backgroundColor;
然后自定义实现文件中的 init 函数以需要 UIColor。
然后忘记 segues 只需执行以下操作。
YourViewController *viewController = [[YourViewController alloc] initWithBackgroundColor:[UIColor someColor]];
[self.navigationController pushViewController:YourViewController animation:YES];
等等瞧。
@sfeuerstein是正确的根据他的建议
- (IBAction)changeColor:(id)sender {
[self performSegueWithIdentifier:@"changeC" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
ViewController* controller = [segue destinationViewController];
controller.state = YES; // set bool value in your controller state
}
在视图控制器中进行检查
-(void)ViewDidLoad{
if(NewState){
controller.view.backgroundColor = [UIColor blueColor];
}
else{
controller.view.backgroundColor = [UIColor whiteColor];
}
}
但我仍然不知道,你为什么要做这样的事情。 这不是好方法。