У меня есть UIViewController, у которого есть UIPopoverController, у которого есть UINavigationController, а затем UIViewController. Как я могу от дочернего UIViewController вызвать метод (например, - (void) update) в родительском UIViewController? попробовал много комбинаций, но все равно не работал.Метод вызова во вложенных родительских контроллерах
ответ
В вашем ребенке:
@interface MyChildController:UIViewController {
MyParentController *parent;
}
@property(nonatomic, assign) MyParentController *parent;
@end
@implementation MyChildController
@synthesize parent;
...
В вашем родительском контроллере, при создании экземпляра вашего ребенка:
MyChildController *newChild = [[[MyChildController alloc] initWithNibName:nil bundle:nil] autorelease];
newChild.parent = self;
...
Теперь у вашего ребенка вы есть реф к вашему родителю, который вы можете использовать. Например, какой-либо метод у вашего ребенка:
Одним из возможных подходов было бы использование NSNotificationCenter. В методе родительского ViewController viewDidLoad:
зарегистрируйте его как наблюдателя определенного уведомления (я буду использовать @ «DummyNotification» в качестве имени уведомления в моем примере). Затем опубликуйте это уведомление из соответствующего метода в дочернем ViewController. Результат будет выглядеть примерно так:
ParentViewController.m
- (void) viewDidLoad
{
/* existing code */
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(update) name:@"DummyNotification" object:nil];
}
- (void) update
{
//method body
}
ChildViewController.m
//put this line wherever you want the ParentViewController to call -update
[[NSNotificationCenter defaultCenter] postNotificationName:@"DummyNotification" object:self];
Ссылка: NSNotificationCenter Class Reference
Кроме того, этот вопрос помечается как iPhone, но Apple, Документация UIPopoverController гласит, что класс используется специально для iPad и не будет работать на других устройствах. Является ли этот вопрос неправильным?
Благодарим вас за это! Я знаю, что есть некоторые проблемы с разделением проблем, но мне действительно нужно получить доступ к функции на моем родительском контроллере. Искал интернет с высоким и низким для чего-то такого простого, спасибо. – Rail24