2010-07-30 3 views
1

У меня есть UIViewController, у которого есть UIPopoverController, у которого есть UINavigationController, а затем UIViewController. Как я могу от дочернего UIViewController вызвать метод (например, - (void) update) в родительском UIViewController? попробовал много комбинаций, но все равно не работал.Метод вызова во вложенных родительских контроллерах

ответ

5

В вашем ребенке:

@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; 

... 

Теперь у вашего ребенка вы есть реф к вашему родителю, который вы можете использовать. Например, какой-либо метод у вашего ребенка:

+0

Благодарим вас за это! Я знаю, что есть некоторые проблемы с разделением проблем, но мне действительно нужно получить доступ к функции на моем родительском контроллере. Искал интернет с высоким и низким для чего-то такого простого, спасибо. – Rail24

1

Одним из возможных подходов было бы использование 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 и не будет работать на других устройствах. Является ли этот вопрос неправильным?

Код: UIPopoverController Class Reference