从弹出窗口将 UIViewController 推送到 UINavigationController

Posted

技术标签:

【中文标题】从弹出窗口将 UIViewController 推送到 UINavigationController【英文标题】:Push UIViewController to UINavigationController from a popover 【发布时间】:2014-01-15 12:13:08 【问题描述】:

我在尝试将新视图控制器推送到现有导航控制器时遇到问题。

我正在尝试的是在推送导航UIBarButtonItem 时出现UIPopoverController,然后从该“下拉菜单”中选择一个菜单点,该菜单点会将关联的视图控制器推送到“主”导航控制器上。

我尝试了以下方法,它给出了一个模态。但我希望推动观点。 如果选择 push 而不是 modal,结果如下。

我还尝试制作自定义UITableViewController(在弹出框上),我尝试了以下代码:

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UINavigationController *dash = [storyboard instantiateViewControllerWithIdentifier:@"dash_nav"];
    UIViewController *students = [storyboard instantiateViewControllerWithIdentifier:@"students"];

    if (indexPath.row == 0) 
       [dash pushViewController:students animated:YES];
//     [[dash navigationController] presentViewController:students animated:YES completion:nil];
    
    NSLog(@"%@", [dash title]);
    NSLog(@"index = %i", indexPath.row);

有没有办法做我想要完成的事情?

【问题讨论】:

两件事.. 首先,你是如何在故事板中制作这些小 tableViews 的?二、如果使用master-detail,可以使用replace代替push 【参考方案1】:

这段代码:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UINavigationController *dash = [storyboard instantiateViewControllerWithIdentifier:@"dash_nav"];
UIViewController *students = [storyboard instantiateViewControllerWithIdentifier:@"students"];

正在创建太多新实例。您应该使用现有的故事板 (self. storyboard) 和现有的导航控制器。导航控制器需要传递给表视图控制器(您应该使用它,因为情节提要没有所需的信息)。我们将其命名为originatingNavigationController,即表格视图控制器上的新@property

当 segue 触发显示弹出框时,将导航控制器引用设置到目标视图控制器(表格视图)中。

然后,在didSelectRowAtIndexPath: 方法中,您只需实例化students VC 并推送它:

UIViewController *students = [self.storyboard instantiateViewControllerWithIdentifier:@"students"];
[self.originatingNavigationController pushViewController:students animated:YES];

然后表格视图控制器应该自行关闭(它的弹出框)。

【讨论】:

这正是我所需要的!谢谢。

以上是关于从弹出窗口将 UIViewController 推送到 UINavigationController的主要内容,如果未能解决你的问题,请参考以下文章

从弹出窗口呈现视图

将数据从弹出窗口传递到页面

如何从弹出窗口向 boxlayout 添加新标签?

从弹出窗口设置localStorage

Javascript - 从弹出窗口重定向父窗口

无法从弹出窗口中的日历为 UITextField 设置值