настоящий модальный контроллер вида - PullRequest
11 голосов
/ 22 июля 2010

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

20 голосов
/ 22 июля 2010

Похоже, вы еще не объявили 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's 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];
}
0 голосов
/ 22 июля 2010

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

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

- (IBAction)showLogin:(id)sender;

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

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