Вы можете сделать это, немного отсоединив один экран от другого:
- Создайте пользовательский делегат и протокол для модального диалогового окна создания категории. Что-то простое, как:
@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
, вызывается метод делегата, так что ваш основной вид уведомляется о том, что что-то произошло, и он может подтолкнуть правильный вид на место и даже перейти к соответствующей категории.
- В вашем случае, как только создание категории завершено, контроллер основного представления уведомляется, поэтому он может открыть диалоговое окно создания категории и поместить подробное представление категории в стек. Пользователь видит, что модальное диалоговое окно исчезает, и скользит прямо в подробный вид.
- В общем, использование делегатов / протоколов для push-navcontroller и модальных диалогов является действительно удобным шаблоном для создания развязанных и повторно используемых видов. Таким образом, они могут быть вызваны из разных мест. Чтобы сделать его согласованным, вы также можете захотеть иметь метод show
в каждом модальном диалоговом окне и контроллерах push-представления, которые может вызывать вызывающая сторона. Таким образом, есть согласованный способ получить и согласованный способ получить уведомление о том, что с ним покончено.