Ios 将其他UIViewController推送到UINavigationController上的最佳方法
我正在使用Xcode附带的、在中引用的主细节项目模板 问题:我正在试图找出如何向此模板附带的默认Ios 将其他UIViewController推送到UINavigationController上的最佳方法,ios,objective-c,cocoa-touch,cocoa,Ios,Objective C,Cocoa Touch,Cocoa,我正在使用Xcode附带的、在中引用的主细节项目模板 问题:我正在试图找出如何向此模板附带的默认UINavigationController添加额外的UIViewController 具体来说,我想在DetailViewController之后添加一个DetailEditViewController。以下是我迄今为止为此所做的工作: 在DetailViewController中,我在navigationItem中添加了一个编辑按钮: - (void)viewDidLoad { [supe
UINavigationController
添加额外的UIViewController
具体来说,我想在DetailViewController
之后添加一个DetailEditViewController
。以下是我迄今为止为此所做的工作:
在DetailViewController
中,我在navigationItem
中添加了一个编辑按钮:
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.rightBarButtonItem =
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit
target:self
action:@selector(editDetailItem:)];
[self configureView];
}
您可以看到它指定了一个消息选择器editDetailItem:
,我将其实现为:
- (void)editDetailItem:(id)sender
{
[self.navigationController pushViewController:
[[DetailEditViewController alloc] init] animated:YES];
}
我在故事板上创建了一个DetailEditViewController
,代码运行时不会崩溃,生成了一个黑色的空白窗口,其中有一个导航项,可以让我回到细节。从现在起,我很困惑:
- 当我将新的视图控制器拖动到情节提要时,不会创建相应的代码文件!我是否负责为这些控制器制作代码文件?我看到序列图像板视图控制器与Identity Inspector中的类关联。。。但当我把一个新的
拖到情节提要上时,它究竟为什么不为它创建模板呢UIViewController
- 我是否应该使用seque而不是
从-pushViewController
获取DetailViewController
?如果是这样的话,我不知道如何在故事板上添加一个,因为DetailEditViewController
的navigationItem
都是在代码中添加的。没有任何东西可以拖动李>UIBarButtonItem
- 如何将信息从
发送到DetailViewController
?当DetailEditViewController
转到MasterViewController
时,它通过DetailViewController
-prepareforsgue:sender:
[self performSegueWithIdentifier:@"GoToEdit" sender:self];
如果要传递信息,则实现prepareForSegue:,类似于:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"GoToEdit"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
NSDate *object = _objects[indexPath.row];
[[segue destinationViewController] setDetailItem:object];
}
}
首先检查序列标识符是件好事。然后,您可以访问destinationViewController(您可能必须将其强制转换为类,以便编译器能够识别您试图设置的任何属性),并将所需内容传递给它。当您显示的新视图控制器用于“编辑模式”。这个答案同样适用——只需将IB中的segue类型设置为“model”,而不是“push”“代码保持不变。非常感谢rdelmar和rickster。非常感谢你花时间阅读和回复。rdelmar:以下几点:出于某种原因,我将序列从“局部视图”控制器拖动到“编辑局部视图”控制器的能力不稳定。昨天我可以创建一个segue,但后来我删除了该segue,现在我无法通过Ctrl拖动再次创建segue。你知道为什么吗?另外,您知道如何使新的视图控制器具有导航项栏吗?我把一个拖到视图控制器上,它显示在左边的层次结构中,但不在场景中。好吧,我通过缩小来重新创建序列。出于某种原因,缩小屏幕似乎效果更好。IRC folk还建议,如果Ctrl拖动序列不起作用,可以Ctrl单击并使用小圆圈,将在此处添加一个新问题,因此关于我上面的另一个问题哈哈,很抱歉这里出现洪水。看起来,当我添加序列时,它将原始关系从导航控制器一直扩展到我的新场景!非常好,谢谢