Выполнить переход из метода делегата - PullRequest
0 голосов
/ 10 ноября 2011

У меня есть сегментированный элемент управления, при нажатии которого пользователь будет вынужден ввести пароль.

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

Сам переход работает, но не после проверки входа в систему.Я думаю, что это проблема "self" ...

Код класса делегата:

@protocol LoginUserControllerDelegate
    - (void)proceedAfterLogin:(BOOL)proceedToNextController;
@end

@interface LoginUserController : UIViewController {
    IBOutlet UITextField *loginPWD;
    id<LoginUserControllerDelegate> _delegate;

}

@property (nonatomic, retain) UITextField *loginPWD;
@property (nonatomic, assign) id<LoginUserControllerDelegate> delegate;

- (void)checkLogindata; // checks for correct password
@end

@implementation LoginUserController

@synthesize loginPWD;
@synthesize delegate = _delegate;

- (void)checkLogindata {
    ...
    if ([tempDBPWD isEqualToString:tempLoginPWD]) {
         if (_delegate != nil) {
               [self dismissModalViewControllerAnimated:YES];
               [_delegate proceedAfterLogin:YES];
           }

    }
    ...
}

@end

Сегментированный контроллер с методом:

@interface StartViewController : UIViewController <LoginUserControllerDelegate> {
    UISegmentedControl *segmentedControl;
    LoginUserController *_loginUserController;
}

@property (nonatomic,retain) IBOutlet UISegmentedControl *segmentedControl;
@property (nonatomic, retain) LoginUserController *loginUserController;

- (IBAction)segmentedControlIndexChanged:(id)sender;
@end


@implementation StartViewController

@synthesize segmentedControl;
@synthesize loginUserController = _loginUserController;


- (IBAction)segmentedControlIndexChanged:(id)sender
{
    if (self.segmentedControl.selectedSegmentIndex == 0) {
       // get delegate
        AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
        UIStoryboard *storyboard = appDelegate.window.rootViewController.storyboard;
        LoginUserController *loginUserControllerView = [storyboard    instantiateViewControllerWithIdentifier:@"LoginUserViewID"];    
        loginUserControllerView.delegate = self;
        // now show screen
        [self presentModalViewController:loginUserControllerView animated:YES];

    } else {

    }

}

- (void)proceedAfterLogin:(BOOL)proceedToNextController
{
    if (proceedToNextController) {
        // yes, correct login now perform the segue to the controller
        [[self segmentedControl] setSelectedSegmentIndex:UISegmentedControlNoSegment];
        [self performSegueWithIdentifier:@"NextControllerSegueID" sender:self];

    }

}

@end

Я думаю, что [self performSegueWithIdentifier:@"NextControllerSegueID" sender:self]; - это проблема, потому что «я» не является правильным.Это где возникает ошибка и как я могу достичь желаемого поведения?

1 Ответ

1 голос
/ 01 декабря 2011

Вы близки, но вам нужно вернуться к делегату, а затем вызвать dismissModalViewControllerAnimated: YES. Модальный контроллер не может отклонить сам себя, поэтому вам необходимо войти в систему, перезвонить делегату и попросить делегата отклонить модальный контроллер.

...