我正在开发一个iOS应用程序,涉及用户填写文本字段和浏览视图。目前,导航有时使用导航栏处理,有时通过按钮处理。我试图创建一些所需的字段:如果这些字段留空,则阻止应用程序进度。这适用于基于按钮的导航,但不适用于导航栏。我的代码如下:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"birthPopBus"]) {
currentPopoverSegue = (UIStoryboardPopoverSegue *)segue;
pvc = [segue destinationViewController];
[pvc setDelegate:self];
}
else if([[segue identifier] isEqualToString:@"SecondBusPageSegue"]) {
//This code breaks the next page
//Check fields, and create error message (code removed for readability)...
//If the fields are not filled in, display the alert with generated string.
if(!(first && last && email && phone && address && zip && ssn && birthFilled)){
UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Required Fields Missing:"
message:alertMessageMutable
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[message show];
}
//Perform the segue, should only run if all required fields are filled.
else{
[self fillBus1Dictionary];
NSLog(@"application dictionary: %@", self.application);
SecBusPage * secondBusPage = segue.destinationViewController;
secondBusPage.application = self.application;
}
}
}
错误消息将显示,但仅在视图更改后显示。因此,用户进入SecondBusPage,并收到一条警告,说“你没有填写字段X,Y,Z”。这对他们来说非常困惑。有什么想法阻止导航栏切换视图?
提前致谢!
答案 0 :(得分:3)
您可以通过在下面的链接帖子
中实现我的答案中的条件段来轻松实现此目的Conditional Segue Using Storyboard
您无法从prepareForSegue中取消segue。而不是基于条件执行segues
答案 1 :(得分:0)
你正在从故事板中做segue,你不能取消故事板segue。你应该做的是删除segue并使用:
if(!(first && last && email && phone && address && zip && ssn && birthFilled)){
UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Required Fields Missing:"
message:alertMessageMutable
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[message show];
}else
{
[self.navigationController pushViewController:yourViewController animation:YES];
}
答案 2 :(得分:0)
故事板限制了自定义行为的灵活性。
我在应用程序中控制导航的操作是:
在项目的id
中创建名为mainDelegate
的{{1}}实例对象(属性),每次出现AppDelegate
时,我都会设置它使用viewController
方法中的以下内容到当前视图控制器:
viewDidAppear
我为appDelegate.mainDelegate = self
使用了自定义navigationBar
。
在这个自定义navBar的课程中,用户点按一个按钮,我会检查:
navigationController
if ([appDelegate.mainDelegate isKindOfClass:[myViewController class]]){
if ([appDelegate.mainDelegate allFieldsAreFilled]){
//perform action of pushing view
}
}
是allFieldsAreFilled
。