如何在不重置当前状态的情况下从一个viewcontroller到自己的segue?

时间:2014-02-11 17:48:41

标签: ios iphone objective-c uiviewcontroller uistoryboardsegue

我确实通过使用隐藏按钮然后使用另一个制作segue的按钮从我的viewcontroller到自己做了一个segue。只是为了澄清,说我想通过使用segue来改变视图bg颜色。这里的问题是视图返回到它的第一个状态,好像我再次运行它,因为它通过viewdidload和viewdidappear等等。 是否有一种方法或解决方法可以用来继续从我的观点的最后状态开始?

我需要为此代码添加什么内容,例如:

- (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];   
}

3 个答案:

答案 0 :(得分:2)

我甚至不会问为什么你真的想要这样做,但你可以只有一个像shouldReloadView这样的BOOL,并在prepareForSegue:中将其设置为NO。然后,在viewDidLoadviewWillAppear内,只需在进行任何设置之前检查该BOOL。

答案 1 :(得分:0)

最好的方法是在头文件中添加颜色变量:

 @property (nonatomic, strong) UIColor *backgroundColor;

然后在实现文件中自定义init函数以要求UIColor。

然后忘记segues只需执行以下操作。

  YourViewController *viewController = [[YourViewController alloc] initWithBackgroundColor:[UIColor someColor]];

  [self.navigationController pushViewController:YourViewController animation:YES];

Et瞧。

答案 2 :(得分:0)

@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]; 
   }
}

但我仍然不知道,为什么你要这样做。这不是好方法。