Вопрос о множественном представлении iPhone

У меня есть контроллер корневого представления, который содержит выход для моего контроллера представления входа в систему. корневое представление должно управлять потоком к следующему представлению, но в моем представлении входа есть кнопка для продолжения. как мне настроить сенсорную кнопку внутри на IBAction в моем корневом контроллере?

Один из методов, который у меня есть, это сохранить указатель на корневой класс, где я создаю класс входа в систему (новый код закомментирован):

// RootViewController.m

- (void)viewDidLoad {
    LoginViewController *loginController = 
        [[LoginViewController alloc]initWithNibName:@"LoginView" bundle:nil];
    self.loginViewController = loginController;
    //loginViewController.parent = self;
    [self.view insertSubview:loginController.view atIndex:0];
    [loginController release];
    [super viewDidLoad];
}

- (IBAction)loginPressed: (id)sender
{
    self.loginViewController.loginButton.enabled = NO; //yea... doesnt work
}

Итак, в IB я добавляю UIViewController к Nib и даю ему родительский элемент в качестве выхода, а затем назначаю событие касания кнопки внутри события loginPressed, которое определено в корневом контроллере (родительском)... это не сработало так хорошо, явно ссылаясь на элементы управления из self.loginViewController в RootViewController.

есть ли правильный способ сделать это.

- разочарованный программист на С++/С#/java


person Tom Fobear    schedule 09.06.2011    source источник


Ответы (3)


Создайте выход метода нажатия кнопки в том же классе, что и этот XIB, и подключите его. Я предполагаю, что ваше представление входа создается корневым контроллером... создайте свойство назначения для корневого представления в представлении входа, а затем назначьте ему корневой контроллер при создании представления входа. Затем в методе представления входа в систему для «нажатой кнопки» вы можете ссылаться на контроллер корневого представления. Изложены:

в файле .h LoginController:

@property (nonatomic, assign) RootViewController* rvc;

в файле .m LoginController:

@synthesize rvc;

в Root View Controller «создайте код контроллера входа в систему» ​​после того, как вы его инициализировали, но до того, как представили его:

[loginController setRvc:self];

в вашем методе касания кнопки LoginController:

[[self rvc] whateverMethodThatDoesLoginStuff];

Таким образом, у вас есть путь между нажатием пользователем кнопки и вашим кодом входа в систему.

person Tim    schedule 09.06.2011

Рассматривали ли вы модальное представление loginView? Затем вы можете открыть представление и вернуться к rootViewController и двигаться дальше.

person PengOne    schedule 09.06.2011
comment
Я думаю, что у меня уже есть что-то подобное, у вас есть пример? - person Tom Fobear; 10.06.2011
comment
это хороший совет, у вас может быть метод делегата в корневом каталоге, который при успешном входе в систему закроет представление входа и затем перейдет к следующему представлению. - person Matt; 10.06.2011
comment
@Matt, не могли бы вы привести пример, пожалуйста? - person Tom Fobear; 10.06.2011

Вы можете иметь loginViewController как IBOutlet, подключить его действие «подправить внутри» к -loginPressed: владельца файла.

Или вы можете выделить и инициализировать свой контроллер в -viewDidLoad программно самостоятельно, а также установить действие программно.

Но то, что вы сделали, кажется, смешивает два пути.

person ZhangChn    schedule 09.06.2011