2014-01-21 5 views
0

На iPad-симуляторе у меня есть ViewController A, который представляет собой UIPopoverController, чей contentViewController является ViewController B, внутри которого у меня есть кнопка, чтобы отклонить UIPopoverController.UIPopoverController: обновить вид после его отклонения

Когда он уволен, мне нужно обновить вид ViewController A, основанный на некотором поле в ViewController B.

Для того, чтобы сделать это, я заявляю, ViewController А как свойство (weakref) из ViewController B так, что в ViewController B, где он увольняет поповер, я могу сказать:

[self.viewControllerA.popover dismissPopoverAnimated:YES]; 
self.viewControllerA.popover = nil; 
self.viewControllerA.textLabel.text = self.someField 

Является ли это правильный способ сделать это? Поскольку нет обратного вызова, когда мы отклоняем popover прагматично, я не могу придумать лучшего решения.

У кого-нибудь есть идея? Прохождение диспетчеров представлений вокруг кажется мне просто неудобным.

ответ

0

Лучший способ это использование Delegation, просто объявить делегат в контроллере B, как

@protocol ControllerSDelegate <NSObject> 
-(void) hidePopoverDelegateMethod; 
@end 

и называем это на действии для передачи данных и освобождает от контроллера как

if (_delegate != nil) { 
    [_delegate hidePopoverDelegateMethod]; 
} 

и

в вашем контроллере A вы можете справиться с этим дель egate call

-(void) hidePopoverDelegateMethod { 
    [self.paymentPopover dismissPopoverAnimated:YES]; 
    if (self.paymentPopover) { 
     self.paymentPopover = nil; 
    } 
    [self initializeData]; 
} 
0

Я думаю, что делегаты или отправка NSNotification улучшатся.

Примечание:

Изменение последовательности выполнения будет делать больше совершенства к текущему коду.

self.viewControllerA.textLabel.text = self.someField 
[self.viewControllerA.popover dismissPopoverAnimated:YES]; 
self.viewControllerA.popover = nil; 
+0

Я бы предпочел делегировать уведомление, поскольку только один объект должен быть уведомлен. – bohanl

+0

Это не вызывается, когда -dismissPopoverAnimated: вызывается непосредственно. – bohanl

Смежные вопросы