UITableViewController 没有将视图推送到堆栈上
Posted
技术标签:
【中文标题】UITableViewController 没有将视图推送到堆栈上【英文标题】:UITableViewController isn't pushing views onto the stack 【发布时间】:2011-08-08 22:26:11 【问题描述】:我有一个 UITableViewController,它的标题视图中有一个 UISearchbar。当用户搜索时,我的 UITableView 会填充结果。当用户选择结果时,我想将一个新的视图控制器推入堆栈。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (cell.accessoryType == UITableViewCellAccessoryNone)
cell.accessoryType = UITableViewCellAccessoryCheckmark;
WatchlistSheetView* watchlistSheetView = [[WatchlistSheetView alloc] initWithNibName:@"WatchlistSheetView" bundle:nil];
watchlistSheetView.symbol = cell.textLabel.text;
[self.navigationController pushViewController:watchlistSheetView animated:YES];
[watchlistSheetView release];
//[self dismissModalViewControllerAnimated:YES];
以下内容不会将视图控制器推入堆栈。没发生什么事。我该如何解决?
【问题讨论】:
您能否确认 watchlistSheetView 在此调用后不为零并且 self.navigationController 不为零?总的来说,这段代码看起来不错。 【参考方案1】:我猜self.navigationController
为nil,所以pushViewController
的消息无处发送。
要解决此问题,您可以在您的 application:didFinishLaunching
中创建一个 UINavigationController
并将您的表视图控制器作为其根控制器推送到它上面,如下所示:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
UINavigationController* navigation = [[UINavigationController alloc] init];
....
[navigation pushViewController:yourTableViewController animated:NO];
...
[window addSubview:[navigation view]];
[self.window makeKeyAndVisible];
或者您可以使用initWithRootController
使用您的表格视图控制器初始化导航视图控制器。
【讨论】:
这个 UITableViewController 正在以模态方式呈现。这是否意味着我没有 UINavigationController?我在哪里可以设置? 我的答案中的代码解释了设置导航控制器应该做什么。如果您还没有通过代码或在 IB 中创建导航控制器,那么您没有它,您需要创建它。最好的事情,就像我在回答中展示的那样,在application:didFinishLaunchingWithOptions
中创建它。如果你需要你的 UI 是模态的,你可以模态地展示导航控制器,但首先我会以“正常”的方式来做。
我确实有一个导航控制器。我的应用程序是一个 UITabBarController 应用程序,其中包含每个选项卡的 UINavigationControllers。其中一个选项卡以模态方式启动另一个 UITableView。这就是我遇到问题的地方。也许我需要获取 parentViewController 的导航栏?
你想要一个导航控制器inside的模态视图吗?这也是可能的...您也可以将新视图推送到模态控制器的父级上,但是如果您在显示模态时执行此操作,我不确定结果...【参考方案2】:
在引用导航控制器时,您似乎在调用 self。你真的分配了一个导航控制器并将它分配给自己吗?
【讨论】:
以上是关于UITableViewController 没有将视图推送到堆栈上的主要内容,如果未能解决你的问题,请参考以下文章
将 UITableViewController 插入其他 UIView
Objective-c 故事板 - UITableViewController 中的导航栏没有出现
将 UITableViewController 添加到其他视图