присутствует регулятор модальное представление


Я только начинаю разработку 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 11

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. Поместите точку останова в свой метод, чтобы убедиться, что он вызывается.