2011-08-27 33 views
0

我有以下代码:iPhone简单问题:如何从主类调用方法?

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

这是从我MainViewController调用。

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

我读了很多关于委托并尝试过,但没有得到它的工作。 有人可以帮我吗?

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

回答

4

我读了很多关于委托并尝试过,但没有得到它上班。

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

所有你需要做的就是增加一些像这样的LoginViewController.h以上@interface:

@protocol LoginViewControllerDelegate 

- (void)loginViewControllerDidFinish; 

@end 

它声明一个方法的协议。然后@interface和@end之间补充一点:

@property (nonatomic, assign) id <LoginViewControllerDelegate> delegate; 

这意味着你的登录视图控制器将有一个属性叫做委托,它将指向任何类的一个实例(这就是ID装置)符合它的委托协议(介于<和>之间的东西)。不要忘记在.m文件里面输入@synthesize delegate;

现在你需要做的是内部MainViewController.h添加到@interface一行:

@interface MainViewController : UIViewController <LoginViewControllerDelegate> 

告诉你MainViewController类符合本LoginViewControllerDelegate委托协议的编译器。现在在MainViewController.m中实现- (void)loginViewControllerDidFinish;方法,并在呈现登录视图控制器模式地将其委托给自己(login.delegate = self;)之前。当你登录的视图控制器内部完成,您关闭之前,调用委托方法在您委托:

[self.delegate loginViewControllerDidFinish]; 

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

+0

谢谢,我做了最多的事情,问题是,我无法设置委托=自我,因为我使用Three20导航器来调用LoginViewController。有任何想法吗? – Kovu

+0

你是指Three20导航仪的实例吗?如果是这种情况,你的界面看起来像'@interface MainViewController:UIViewController'。只要将''添加到该行的末尾即可。 –

1

尝试这种情况:

1)推登录视图时,在MainViewController在方法viewWillAppear中设置一些标志MainViewController

2)检查该标志为1)。如果已设置,则加载初始数据并取消设置标志。否则,请按LoginView。

1

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

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