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 添加到其他视图

如何在没有 UITableViewController 的情况下结束 UIRefreshControl

UITableViewController 不显示

将 UITableViewController 中选定单元格中的“正确”数据传递给 ViewController