从弹出窗口将 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的主要内容,如果未能解决你的问题,请参考以下文章