Простой вопрос iPhone: как вызвать метод из основного класса? - PullRequest
0 голосов
/ 27 августа 2011

У меня есть следующий код:

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

Это вызывается из моего MainViewController.

Теперь, когда LoginViewController будет отклонен (конечно, это происходит только при правильном входе в систему), я должен вызвать метод в моем MainViewController, чтобы загрузить исходные данные для моего приложения.

Я много читал о делегате и пробовал, но не заставляю его работать. Может ли кто-нибудь помочь мне, пожалуйста?

(если возможно, пожалуйста, с несколькими строками кода) Любая помощь приветствуется!

Ответы [ 3 ]

4 голосов
/ 27 августа 2011

Я много читал о делегате и пробовал его, но не заставил его работать.

Что вы пробовали на самом деле?Ваш LoginViewController должен определять простой протокол делегата, и ваш MainViewController должен соответствовать ему.

Все, что вам нужно сделать, это добавить что-то подобное в LoginViewController.h над @interface:

@protocol LoginViewControllerDelegate

- (void)loginViewControllerDidFinish;

@end

Который объявляет протокол с одним методом.Затем добавьте это между @interface и @end:

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

Это означает, что ваш контроллер представления входа в систему будет иметь свойство под названием делегат, которое будет указывать на экземпляр любого класса (что означает идентификатор), который соответствует егопротокол делегата (вещь между <и>).Не забудьте @synthesize delegate; внутри .m файла.

Теперь вам нужно внутри MainViewController.h добавить строку @interface следующим образом:

@interface MainViewController : UIViewController <LoginViewControllerDelegate>

, которая сообщаетКомпилятор ваш класс MainViewController соответствует этому протоколу делегата LoginViewControllerDelegate.Теперь реализуйте метод - (void)loginViewControllerDidFinish; внутри MainViewController.m и перед тем, как представить контроллер вида входа в систему, установите его делегат на себя (login.delegate = self;).Когда вы закончите в своем контроллере представления входа в систему, перед тем как отменить его, вызовите метод делегата для вашего делегата:

[self.delegate loginViewControllerDidFinish];

И это все.Есть еще вопросы?

1 голос
/ 27 августа 2011

У вас есть UIApplicationDelegate, и у него должна быть переменная экземпляра, которая указывает на MainViewController.Предоставьте доступ к этой переменной экземпляра через свойство, скажем mainViewController (в вашем UIApplicationDelegate), и затем вы сможете получить к нему доступ следующим образом:

[(MyUIApplicationDelegate *)[[UIApplication sharedApplication] delegate] mainViewController]
1 голос
/ 27 августа 2011

Попробуйте это:

1) при нажатии на вид входа в систему установите некоторый флаг в MainViewController

2) в методе viewWillAppear в MainViewController проверьте этот флаг с 1).Если он установлен, загрузите исходные данные и снимите флажок.В противном случае нажмите LoginView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...