iPhone简单问题:如何从主类调用方法?

时间:2011-08-27 08:36:04

标签: ios methods delegates

我有以下代码:

     LoginViewController *lvc = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
 [self presentModalViewController:lvc animated:false];
 [lvc release];

从我的MainViewController调用。

现在,当LoginViewController被解散时(当然这只会在登录正确时发生)我必须在我的MainViewController中调用一个方法来加载我的应用程序的初始数据。

我阅读了很多关于委托的内容并尝试过,但是没有让它发挥作用。 有人可以帮帮我吗?

(如果可能的话,请用几行代码) 欢迎任何帮助!

3 个答案:

答案 0 :(得分:4)

  

我阅读了很多关于委托的内容并尝试过,但是没有让它发挥作用。

你真的尝试过什么?您的LoginViewController必须定义一个简单的委托协议,您的MainViewController必须符合它。

您需要做的就是在@interface上面的LoginViewController.h中添加类似的内容:

@protocol LoginViewControllerDelegate

- (void)loginViewControllerDidFinish;

@end

使用一种方法声明协议。然后在@interface和@end:

之间添加它
@property (nonatomic, assign) id <LoginViewControllerDelegate> delegate;

这意味着您的登录视图控制器将具有一个名为delegate的属性,该属性将指向符合其委托协议(&lt;和&gt;之间的东西)的任何类的实例(即id的含义)。不要忘记.m文件中的@synthesize delegate;

现在您需要做的是在MainViewController.h中添加到@interface行,如下所示:

@interface MainViewController : UIViewController <LoginViewControllerDelegate>

告诉编译器您的MainViewController类符合此LoginViewControllerDelegate委托协议。现在在MainViewController.m中实现- (void)loginViewControllerDidFinish;方法,并在呈现登录视图控制器之前以模态方式将其委托设置为self(login.delegate = self;)。在登录视图控制器中完成后,在解除它之前,请在您的委托上调用委托方法:

[self.delegate loginViewControllerDidFinish];

就是这样。还有其他问题吗?

答案 1 :(得分:1)

试试这个:

1)当按下登录视图时,在MainViewController中设置一些标志

2)在MainViewController中的方法 viewWillAppear 中检查来自1)的那个标志。如果已设置,则加载初始数据和取消设置标志。否则按下LoginView。

答案 2 :(得分:1)

你有一个UIApplicationDelegate,它应该有一个指向MainViewController的实例变量。通过属性公开此实例变量,比如mainViewController(在您的UIApplicationDelegate上),然后您可以像这样访问它:

[(MyUIApplicationDelegate *)[[UIApplication sharedApplication] delegate] mainViewController]