您可以通过将一个屏幕与另一个屏幕进行一点分离来做到这一点:
- 为您的类别创建模式对话框创建自定义委托和协议。像这样简单的东西:
@protocol CategoryCreationProtocol
- (void) categoryAddDone:(NSString *)category;
- (void) categoryAddCancelled;
@end
...
@interface CategoryCreationDialog : UIViewController {
...
id<NSObject, CategoryCreationProtocol> categoryDelegate;
}
@property (assign) id< CategoryCreationProtocol, NSObject> categoryDelegate;
- 当用户点击“保存”按钮时,在模式对话框中,关闭视图控制器后,调用委托方法:
if (categoryDelegate && [categoryDelegate
respondsToSelector:@selector(categoryAddDone:)])
[categoryDelegate categoryAddDone:newCategory];
Cancel
此外,按钮也有类似的东西。
- 您的主控制器实现该categoryAddDone
方法并将自己设置categoryDelegate
为模态对话框。
- 在运行时,当用户点击时,Save
会调用委托方法,以便通知您的主视图发生了某些事情,并且它可以将正确的视图推送到位,甚至跳转到正确的类别。
- 在您的情况下,一旦类别创建完成,主视图控制器就会收到通知,因此它可以释放类别创建对话框并将类别详细视图推送到堆栈中。用户看到模态对话框消失并直接滑入详细视图。
- 一般来说,使用委托/协议来推送导航控制器和模式对话框是一种非常方便的模式,可以制作解耦和可重用的视图。通过这种方式,它们可以从不同的地方调用。为了使其保持一致,您可能还希望show
在每个模态对话框和调用者可以调用的推送视图控制器上都有一个方法。这样,就有了一种一致的进入方式和一种一致的方式来通知用户已完成它。