【问题标题】:IOS: use navigation controller in a subviewIOS:在子视图中使用导航控制器
【发布时间】:2011-09-05 13:20:43
【问题描述】:

在我的程序视图中,我有一个按钮,用这个按钮我打开一个子视图;这个子视图是一个带有表格视图的视图。当我推送表格视图的一行时,我想转到另一个视图,所以我想用导航控制器来做这个;我该怎么做?

【问题讨论】:

    标签: xcode ios uitableview uinavigationcontroller


    【解决方案1】:

    当您单击表格的某一行时,您的表格视图委托将收到 tableView:didSelectRowAtIndexPath: 消息。

    您可以将代码放在那里创建 UINavigationController 并将您的新视图推送到它。

    此示例代码(来自另一个 answer of mine on S.O.)展示了如何做到这一点:

     UINavigationController* navigation = [[UINavigationController alloc] init];
     iVkViewController *overviewViewController = [[iVkViewController alloc] init];
     overviewViewController.title = @"First";
     [navigation pushViewController:overviewViewController animated:NO];
    

    这应该可以帮助您走上正轨。

    附带说明:您可能会从一开始就考虑使用导航控制器,这会使您的 UI 更加“行为良好”,但这最终取决于您的应用需求。

    【讨论】:

    • 然后我用 tableview 委托方法创建一个文件,在我在 didSelectRowAtIndexPath 中编写你的代码并且我有一个导航控制器之后?和导航栏?
    • 是的,我的示例不是指 UITableViewController,而是将通用视图(根据您的问题)推送到导航控制器。如果这是另一个表格视图,您将需要处理它,就像您已经为您拥有的另一个表格所做的那样。实际上,你也可以在一个新的 nib 文件中定义你的表视图和它的控制器,然后在上面的代码中加载它,这取决于你。默认情况下,导航控制器管理一个允许您返回的导航栏,因此您无需对导航栏做任何特殊操作(除非您希望对其进行自定义)。
    • 不,我想要第一个子视图在哪里是表视图,当我推送此表视图的一行时,我会转到第二个子视图(但这不是表视图)
    • 对不起,我误读了您的评论。你是对的,你需要一个委托,你还需要用它的视图控制器创建一个新视图(你想要推送到控制器上的东西),我的代码就可以解决问题(包括导航栏)。如果您有问题,请提供详细信息...
    • 你有什么例子吗?
    【解决方案2】:

    如果 UIViewController addSubView 是 UITableViewController 的一个视图,你想推入 tableView:didSelectRowAtIndexPath 的方法,你应该检查 self.navigationController 是否为 nil。如果它是 nil,你可能应该使用

    [self.parentViewController.navigationController pushViewController:controller animated:YES];
    

    如果self.parentViewController也是nil,有时候,你必须设置一个@property来指出UITableViewController中的parentViewController,比如:

    @property (nonatomic, weak) UIViewController *parentVC;
    

    在 UIViewController 中:

    UITableViewController *tableViewVC = [[UITableViewController alloc] init];
    tableViewVC.parentVC = self;
    

    在 UITableViewController 中,-tableView:didSelectRowAtIndexPath:

    [self.parentVC.navigationController pushViewController:controller animated:YES];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多