Кнопка UINavigation Bar, измените IBAction в зависимости от клика - PullRequest
2 голосов
/ 02 июля 2011

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

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

, чтобы помочь визуализировать это.

По умолчанию у меня есть правая кнопка на контроллере навигации, которая говорит вход в систему, после нажатия этой кнопки входа в систему вход в систему ibaction login: (id)нажата отправитель.

что я хочу сделать, это изменить кнопку на выход и вызвать выход из системы: (id) отправитель при нажатии.

это возможно.

спасибо.

Ответы [ 3 ]

3 голосов
/ 02 июля 2011

Вы можете просто изменить действие кнопки при ее нажатии:

- (void)login:(UIButton*)button {
    [button setTitle:@"Logout"];        
    [button setAction:@selector(logout:)];
}

- (void)logout:(UIButton*)button {
    [button setTitle:@"Login"];     
    [button setAction:@selector(login:)];
}

Альтернативно, поскольку кнопка находится на панели UINavigationBar, вместо этого можно сделать следующее:

-(IBAction)login:(id)sender{
UIBarButtonItem *logoutButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                                                                            target:self
                                                                            action:@selector(logout:)];
[[self navigationItem] setRightBarButtonItem:logoutButton];
[logoutButton release];
}

-(IBAction)logout:(id)sender{
UIBarButtonItem *loginButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                                                                            target:self
                                                                            action:@selector(login:)];
[[self navigationItem] setRightBarButtonItem:loginButton];
[loginButton release];
}
1 голос
/ 02 июля 2011

Вы можете изменить целевое действие, используя addTarget и removeTarget, как указано в этом связанном вопросе .

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

Другая альтернатива - проверка свойства UIButton NSString *title.

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

1 голос
/ 02 июля 2011

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

Аналогично, вы можете установить две различные операции в зависимости от состояния кнопки. Таким образом, если кнопка находится в нормальном состоянии / состоянии по умолчанию, пользователь должен войти в систему. Как только пользователь войдет в систему, мы переведем кнопку в выбранное состояние.

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

Таким образом, мы можем продолжать переключать состояния одной и той же кнопки для выполнения двух разных операций.

Код будет выглядеть примерно так.

-(IBAction) loginButtonPressed:(id) sender {
    UIButton *loginButton = (UIButton *) sender;

    if (loginButton.selected == NO) {
        // Represents user needs to login. Code for login user.
    }else
        // Represents user needs to logout. Code for logout user.
    }

    // toggle the login/logout states.
    loginButton.selected = !loginButton.selected;
}

Вы можете указать названия / изображения для кнопки для нормальных / выбранных / выделенных / отключенных состояний. Это сделало бы вашу работу с одной кнопкой.

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