我正在创建一个字典应用程序。它基本上是一个标签栏应用程序,其中一个选项卡用于字典查找,其他选项卡用于语法页面等。
字典查找选项卡顶部有一个UISearchBar,下面有一个UITableView,显示用户在搜索词中键入的结果。
当用户点击结果中的一行时,我想打开一个显示完整字典条目的详细视图。我的理解是,如果它的顶部有一个导航栏,后面的按钮可以返回搜索,那将是最好的。
我为此创建了一个新的视图控制器,我将导航栏和文本视图放入nib文件中。但是,我无法在Interface Builder中显示“后退”按钮,也不会在以后自动发生。
要显示新视图,我使用以下代码:
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:NO];
dictEntryViewController *entryView = [[dictEntryViewController alloc]
initWithNibName:@"dictEntryViewController" bundle:nil];
[self presentModalViewController:entryView animated:YES];
}
这个新视图漂亮地滑动,但导航栏没有后退按钮。作为临时解决方案,我在新视图中创建了一个基本上执行此操作的正常按钮:
[self dismissModalViewControllerAnimated:YES];
...这很有效,但我认为使用导航栏进行导航会更自然。
我有一种感觉我的问题是,当您将新视图推送到两个视图共享导航控制器的现有视图时,仅显示后退按钮。但是,我无法在搜索视图中添加导航栏,因为搜索栏已经占用了屏幕的这一部分。
可能我不应该为此使用模态视图控制器,但它似乎运行良好,当我尝试了一些替代方案(例如,pushViewController)时,它也没有显示后退按钮。
感谢您对此事的帮助。我一直在寻找解决方案很长一段时间,但大多数解决方案似乎都涉及在表格视图的顶部添加导航栏,在这种情况下我无法做到。
答案 0 :(得分:0)
要获取后退按钮,您需要使用UINavigationController
,或者创建自己的按钮图形。不过,我建议UISearchDisplayController
使用UINavigationController
,并将其与UISearchDisplayController
结合使用。
使用UISearchDisplayController
,当您点按搜索栏时,它会在导航栏的顶部移开。然后,当您选择一行并将详细视图控制器推送到导航堆栈时,视图控制器将使用后退按钮滑入。
让UINavigationController
启动并运行有一些工作,但最终结果是(IMO)值得。
您应该可以在IB中进行设置。在主NIB中拖动UITableViewController
,并将其根视图控制器设置为列表视图控制器。在列表视图控制器的NIB(可能是{{1}}的子类)中,拖动表视图顶部的搜索栏和搜索显示控制器,并将其全部挂钩起来。你必须编写过滤结果集的代码,但我猜你已经完成了。
答案 1 :(得分:0)
如果您已在应用程序中实现了导航控制器&能够导航到下一个屏幕....然后它非常棘手。
您确定,您已设置导航栏标题,如果没有,则设置:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.title =@"App Name";
}
现在,棘手的部分,只需将导航栏标题设置为Back &在这里,您将在下一个视图中获得后退按钮。
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:NO];
dictEntryViewController *entryView = [[dictEntryViewController alloc]
initWithNibName:@"dictEntryViewController" bundle:nil];
self.title =@"Back";
[self.navigationController pushViewController:entryView animated:YES];
[entryView release];
}
导航控制器& PresentModalView Controller以不同的方式工作,你的想法是正确的。如果是导航,你可以使用stack&在应用程序中维护导航,而对于PresentModalView,它从头开始,就像一个新的视图&你可以在同一个中实现NavigationController。