这是我如何做到这一点的基本概述。它对我有用,但我不确定这是最好的方法——其他人肯定会加入。
“列表页面”(您的第一个 UITableViewController)实现了一个委托,“添加页面”调用该委托以让“列表页面”知道要添加的项目的详细信息。
当“列表页面”被带有所述详细信息的“添加页面”回调时,它会保存新项目,然后关闭“添加页面”。
为了把这一切联系起来,当“列表页面”创建并显示“添加页面”时,它会传递self
给“添加页面”上的一个 ivar(我称之为delegate
)。这基本上就是两者联系和交流的方式。
这是我为委托定义的协议:
@protocol AddItemViewControllerDelegate
- (void)addItemViewController:(AddItemViewController *)controller
withNewEventName:(NSString *)eventName;
@end
这是“列表页面”按钮单击处理程序:
- (IBAction)addItem
{
AddItemViewController *controller = [[AddItemViewController alloc] initWithNibName:@"AddItemView" bundle:nil];
controller.delegate = self;
[self presentModalViewController:controller animated:YES];
[controller release];
}
这是“添加页面”中的提交代码:
if ([self.delegate respondsToSelector:@selector(addItemViewController:withNewEventName:)]) {
[self.delegate addItemViewController:self withNewEventName:eventNameTextField.text];
}
最后,这是“列表页”中委托协议的实现:
- (void)addItemViewController:(AddItemViewController *)controller
withNewEventName:(NSString *)eventName
{
EventModel *newEvent = [[EventModel alloc] init];
newEvent.name = eventName;
[eventsList addObject:newEvent];
[newEvent release];
[self saveEvents];
[self dismissModalViewControllerAnimated:YES];
}