这似乎是整个Apples应用程序中使用的模式;通过模态视图创建新记录,需要保存或取消以继续,并且通过推入导航堆栈的视图来编辑记录。
基本上将我的ViewController复制为“添加”和“编辑”似乎并不正确,但推送和模态ViewControllers的工作原理存在一些差异,这使得事情复杂化。
我该怎么做才能涵盖这两个基础?
-
差异包括。
当推入堆栈时,导航栏出现在视图的顶部,可以配置为包含取消/保存按钮。当以模态方式呈现时,情况并非如此,因此复制界面需要单独创建工具栏并关闭/保存添加到此的按钮。
当解雇推送视图时,我们会向导航控制器[self.navigationController popViewControllerAnimated:YES];
发送消息,在解除模态视图时,我们会向自己发送消息[self dismissModalViewControllerAnimated:YES];
答案 0 :(得分:0)
您可以在InterfaceBuilder中添加UIToolbar,然后在self.navigationController不为nil时将其隐藏在viewDidLoad中。
至于解雇,你可以有类似的东西:
- (void)didCancel {
[self.navigationController popViewControllerAnimated:YES] || [self dismissModalViewControllerAnimated:YES];
}
如果你的viewcontroller是navigationcontrol的一部分,那么这将是shortcircuit,否则使用dismissModalViewControllerAnimated。
这适用于您的取消按钮。对于保存按钮,调用某种委托方法很有用,例如:
- (void)didSave {
// do your saving juju here
if([self.delegate respondsToSelector:@selector(viewController:didSave:]) {
[self.delegate viewController:self didSave:whatJustGotSaved];
}
[self.navigationController popViewControllerAnimated:YES]; // noop if currently modal
}
在委托的实现中,你可以把:
- (void)viewController:(UIViewController*)viewController didSave:(NSObject*)whatJustGotSaved {
// do stuff with parameters
[self.modalViewController dismissModalViewControllerAnimated:YES]; // noop if not modal
}