Довольно распространено создание протокола делегата для такого Add Controller и сделать родительский контроллер его делегатом.
Когда Add Controller «сделан» (то есть не отменен с помощью возможной кнопки «Отмена»), он вызывает метод делегата, скажем, addControllerIsDone:
, чтобы позволить родительскому контроллеру представления таблицы знать, что он должен принять установленное значение, добавить это к списку, и отклонить Add контроллер.
Вы также можете передать список в Add Controller и позволить ему добавить заданное значение перед вызовом [parentViewController dismissModalViewControllerAnimated:YES]
.
Это зависит от того, хотите ли вы сохранить контроль над списком в контроллере табличного представления или передать его в Add Controller.
И после того, как Add Controller отклонен, вы можете либо выяснить, где ячейка для новой записи должна быть добавлена в tableView и вставить ее с хорошей анимацией, перезагрузить раздел (анимация также возможна) или весь tableView (анимация не возможно).
Первый вариант может выглядеть следующим образом:
@class AddViewController;
@protocol AddViewControllerDelegate <NSObject>
- (void)controllerIsDone:(AddViewController *)controller;
@end
@interface AddViewController : UIViewController
@property (nonatomic, assign) id<AddViewControllerDelegate> delegate;
@end
И код "Готово"
- (IBAction) done: (id) sender
{
......
[self.delegate controllerIsDone:self];
NSLog(@"About to dissmiss modal controller...");
[[self parentViewController] dismissModalViewControllerAnimated:YES];
NSLog(@"Modal controller has been dismissed.");
}
И MyViewController:
@interface MyViewController : UIViewController <AddViewControllerDelegate>
@end
Так что он должен реализовать метод controllerIsDone:
. Вот так например:
- (void)controllerIsDone:(AddViewController *)controller
{
[self.list addObject:controller.textField.text];
}
Поскольку AddViewController отклоняет себя, MyViewController не должен делать это в методе делегата. Но хорошей практикой было бы то, что если вы открыли модальный контроллер вида, вы также должны отклонить его, только ради симметрии. ;)
В этом случае, конечно, textField должен быть общедоступным свойством.
Я уверен, что вы найдете второй вариант.
Читайте о Шаблон декоратора в Руководстве по основам какао .