Текущий контроллер модального просмотра

Я только начинаю с разработки 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];
}

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

Что мне здесь не хватает?

Ответ 1

Похоже, вы не объявили член delegate для LoginForm. Вам нужно будет добавить код, который позволяет экземпляру UIViewController, представляющему LoginForm, модально, когда 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

В LoginForm.m:

@implementation

@synthesize delegate;

//... the rest of LoginForm implementation ...

@end

Затем в экземпляре UIViewController, который представляет LoginForm (позвоните на MyViewController):

В MyViewController.h:

@interface MyViewController : UIViewController <LoginFormDelegate>

@end

В MyViewController.m:

/**
 * 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];
}

Ответ 2

Казалось бы, ваш класс LoginForm происходит от UIViewController. Класс UIViewController не имеет свойства delegate, следовательно, полученная вами компиляция.

Вероятно, ваша проблема заключается в том, что действие не вызывается в первую очередь. Собственная подпись для действия:

- (IBAction)showLogin:(id)sender;

Требуется аргумент sender. Поместите контрольную точку в свой метод, чтобы убедиться, что он вызван.