使用故事板推送viewControllers时传递条件语句

时间:2014-01-22 09:52:03

标签: ios objective-c

假设我有视图控制器Origin和Destination。我想申报一下:

//origin.m file

-(void)pushNextView {


    self.conditional = YES;
    [self performSegueWithIdentifier:@"toDestination" sender:self];

}

我将条件设置为:

//origin .h file
@propery BOOL conditional;

现在在我的目标视图控制器中,我想根据我在原点设置的属性设置条件:

// destination .m file
#import "OriginViewController.h"

OriginViewController *origin = [OriginViewController alloc] init];

if (origin.conditional == YES){

self.navigationItem.hidesbackbutton = YES;

}else{

// Do Nothing    

}

由于某种原因,此条件语句不起作用。这是否必须与故事板做任何事情?

3 个答案:

答案 0 :(得分:1)

通过设置,您似乎最容易做到这一点。您可以在执行segue时直接访问destination.hidesbackbutton:

//in origin.m
-(void) prepareForSegue.... {
   if ([segue.identifier isEqualToString: @"identifierString"]) {
       DestinationVC *destination = (DestinationVC*)[segue destinationViewController];
       destination.hidesbackbutton = self.conditional; //you can set the .hidesbackbutton property here directly, no need for another property, if your setup is just as simple as in the given example
    }
 }

像这样,目的地不检查原点的状态,然后设置它的状态,而原点只设置目的地的状态。 你可以两种方式做到这一点,但这种方式更常见。

当然hidesbackbutton必须是DestinationVC .h文件中声明的公共属性。 如前所述,它应该是hidesBackbuttonhidesBackButton

(这都假设您的DestinationViewController的类被称为DestinationVC

答案 1 :(得分:0)

两件事:hidesbackbutton看起来像是缺少一些camelCase。这至少应该发出警告,不是吗?

同样从架构的角度来看,我不会要求这个条件。将状态传递给目标视图控制器并在那里实现BOOL变量。

吃水:

// origin.m
- (void)prepareForSegue... 
{
    if([segue.identifier isEqualToString:"yourIdentifier"]) {
        [(XYZViewController *)segue.destinationViewController setConditional:YES];
    }
}

答案 2 :(得分:0)

你应该将状态从你的主控制器传递到目标控制器,在那里你应该处理这个View状态,你必须定义

//destination.h file
@propery BOOL conditional;

所以当你从main推动控制器时,可以在

中设置目标控制器视图状态
- (void)viewDidLoad
{
    [super viewDidLoad];

    if (origin.conditional == YES) {
        self.navigationItem.hidesBackButton = YES;
    } else {
    }
}