присутствует регулятор модальное представление
Я только начинаю разработку iphone У меня есть приложение с вкладками, и я хотел бы отобразить журнал в форме модально поэтому я посмотрел здесь Apple Dev и сделал это внутри одного из моих контроллеров вида Я подключил кнопку к следующему действию:
#import "LoginForm.h"
...
-(IBAction)showLogin{
LoginForm *lf = [[LoginForm alloc]initWithNibName:@"LoginForm" bundle:nil];
lf.delegate = self;
lf.modalPresentationStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:lf animated:YES];
}
Когда я строю, я получаю "запрос на член 'делегат' в чем-то, что не является структурой или объединением" Если я избавляюсь от второй строки, Она строится, но нажатие кнопки ничего не делает.
Чего мне здесь не хватает?
2 ответа:
Похоже, что вы не объявили член
delegate
для LoginForm. Вам потребуется добавить код, который позволяет экземпляру для UIViewController, который представит LoginForm, который будет в модальном режиме, когда LoginForm, который это сделал. Вот как объявить свой собственный делегат:В Логинформе.h:
@class LoginForm; @protocol LoginFormDelegate - (void)loginFormDidFinish:(LoginForm*)loginForm; @end @interface LoginForm { // ... all your other members ... id<LoginFormDelegate> delegate; } // ... all your other methods and properties ... @property (retain) id<LoginFormDelegate> delegate; @end
В Логинформе.М:
@implementation @synthesize delegate; //... the rest of LoginForm's implementation ... @end
Затем в экземпляре UIViewController, представляющем LoginForm (назовем его MyViewController):
В MyViewController.h:
@interface MyViewController : UIViewController <LoginFormDelegate> @end
В MyViewController.М:
/** * LoginFormDelegate implementation */ - (void)loginFormDidFinish:(LoginForm*)loginForm { // do whatever, then // hide the modal view [self dismissModalViewControllerAnimated:YES]; // clean up [loginForm release]; } - (IBAction)showLogin:(id)sender { LoginForm *lf = [[LoginForm alloc]initWithNibName:@"LoginForm" bundle:nil]; lf.delegate = self; lf.modalPresentationStyle = UIModalTransitionStyleCrossDissolve; [self presentModalViewController:lf animated:YES]; }
Похоже, что ваш
Ваша проблема, вероятно, заключается в том, что действие не вызывается в первую очередь. Надлежащая подпись для действия:LoginForm
класс происходит отUIViewController
. КлассUIViewController
не имеет свойстваdelegate
, поэтому вы получили ошибку компиляции.- (IBAction)showLogin:(id)sender;
Требуется Аргумент
sender
. Поместите точку останова в свой метод, чтобы убедиться, что он вызывается.