我正在使用Xcode附带的Master-Detail项目模板,并在http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/SecondiOSAppTutorial/中引用
问题:我正在尝试弄清楚如何将其他UIViewController
添加到此模板附带的默认UINavigationController
中。
具体来说,我想在DetailEditViewController
之后添加DetailViewController
。以下是我到目前为止所做的工作:
在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
,代码运行时没有崩溃,生成一个带有导航项的黑色空白窗口,让我回到细节。从这里开始,我很困惑:
UIViewController
创建模板?-pushViewController
从DetailViewController
到DetailEditViewController
吗?如果是这样,我不确定如何在故事板上添加一个,因为navigationItem
的{{1}}都是在代码中添加的。无法按Ctrl键拖动。 UIBarButtonItem
向DetailViewController
发送信息?当DetailEditViewController
偏离MasterViewController
时,它会通过DetailViewController
sender
答案 0 :(得分:2)
你是对的,没有产生相应的文件。系统如何知道你想要什么课程?您需要创建一个UIViewController子类,并将您拖入的控制器的类更改为该类。推送新控制器的最简单方法是使用push segue - 如果故事板中没有用于连接它的UI元素,则直接从控制器连接它并给segue一个标识符(我称之为我的例子中的“GoToEdit”)。在编辑按钮的操作方法中,然后执行segue:
[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];
}
}
首先检查segue标识符是一件好事。然后你可以访问你的destinationViewController(你可能需要将它强制转换为你的类,因此编译器会识别你想要设置它的任何属性),并传递你想要的东西。