【问题标题】:shouldPerformSegueWithIdentifier called before checking other method issue在检查其他方法问题之前调用 shouldPerformSegueWithIdentifier
【发布时间】:2015-01-14 17:54:48
【问题描述】:
我正在尝试进行转场,但我有一个小问题,即我正在单击一个按钮,如果布尔值为 YES,它将在转场中返回 YES,否则返回 NO,但每次我必须单击两次检查文本字段,因为它首先传递给shouldPerformSegueWithIdentifier,而它应该首先检查 IBAction。
请问我该如何解决这个问题?
- (IBAction)search:(id)sender{
if ([_txtfld.text isEqual:@"test"]) {
push = YES; //Bolean
}
else {
push = NO; //Bolean
}
}
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
if ([identifier isEqualToString:@"SearchSegue"] && push==YES) {
NSLog(@"Showed");
return YES;
}
else{
NSLog(@"Not showed");
return NO;
}
}
【问题讨论】:
标签:
ios
objective-c
segue
【解决方案1】:
您需要从按钮中的操作中删除 segue,将其移动到视图控制器,然后在您的 IBAction 方法中调用 performSegueWithIdentifier,或者只使用 shouldPerformSegueWithIdentifier 中的逻辑并删除 @987654324 @ 方法。
所以,要么-
- (IBAction)search:(id)sender{
if ([self.txtfld.text isEqual:@"test"]) {
[self performSegueWithIdentifier:@"SearchSegue" sender:self];
}
}
摆脱shouldPerformSegueWithIdentifier 或摆脱IBAction 方法,只需-
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
BOOL ret=YES;
if ([identifier isEqualToString:@"SearchSegue"]) {
if (![self.txtfld.text isEqual:@"test"]) {
ret=NO;
}
}
return ret;
}