alertView dismissModalViewControllerAnimated

问题描述:

我有主视图与链接到不同的viewcontrollers。我的一个视图有一些表单域,当它们更新成功时,它会调用UIAlertView来通知用户。当用户解散它时,alertView:clickedButtonAtIndex:被调用,而我的dismissModalViewControllerAnimated:回到我的主视图。alertView dismissModalViewControllerAnimated

我遇到的问题是当我这样做时,它不会调用viewDidLoad方法。我有需要更新的变量,有人可以告诉我什么是被调用的。我找不到任何东西,以便我可以进行更新。

处理这种情况的一种简单而灵活的方法是从控制器公开一个方法来重置它。通过这种方式,在任何不可预见的情况下,您可以随时调用此方法,知道你的价值观正在建立:

@interface MyController 
- (void)reset; 
@end 

@implementation MyController 
- (void)reset{ 
    //set some defaults 
} 
- (void)viewDidLoad{ 
    [self reset]; 
} 
- (void)viewWillAppear{ //<--If you want to reset your values every time the view is about to appear 
    [self reset]; 
} 
- (void)viewDidDisappear{ //<--If you want to reset your values every time the view is either dismissed, covered, or hidden 
    [self reset]; 
} 
@end 

然后在你的alertView:clickedButtonAtIndex:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 

    if (buttonIndex==0) { //whatever your situation is 
     //dismissModalViewControllerAnimated: 
     [self.myController reset]; 
    } 
} 

一些额外阅读:UIViewController

+0

'viewDidLoad'将在加载视图后调用一次,这可能会超过一次控制器的生命周期。 – tia 2012-01-14 03:57:16

+0

谢谢大家!我正在考虑重置函数的相同情况,所以现在它由 - (void)viewWillAppear:(BOOL)控制,并且每次都按照您的说法调用它。有一个控制面板视图和一个窗体视图,所以self.myController重置不适合在这里。 – Harpua 2012-01-14 04:46:52

viewWillAppearviewDidAppear将在视图控制器变得可见时被调用。您可以检查您的数据是否已在这些功能中更新并相应地更新您的视图。