假设我有视图控制器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
}
由于某种原因,此条件语句不起作用。这是否必须与故事板做任何事情?
答案 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文件中声明的公共属性。
如前所述,它应该是hidesBackbutton
或hidesBackButton
。
(这都假设您的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 {
}
}