UINavigationBar Button,根据点击更改IBAction

时间:2011-07-02 15:33:01

标签: iphone objective-c cocoa-touch uinavigationcontroller

好的,所以目前我的导航控制器有一个右键,可以记录用户。

但是我想在点击后将登录按钮更改为注销,此注销按钮将调用不同的IBAction。

帮助想象这一点。

默认情况下,导航控制器上有一个右键,表示登录,按下此登录按钮后,按下ibaction登录:( id)发件人。

我想要做的是将按钮更改为注销并在点击时调用注销:(id)发件人。

这是可能的。

感谢。

3 个答案:

答案 0 :(得分:3)

您只需更改按钮按下时的功能:

- (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 :(得分:1)

您可以为按钮设置两个不同的标题或图像,一个用于正常/默认状态,另一个用于选定状态。

同样,您可以根据按钮的状态设置两种不同的操作。 因此,如果按钮处于正常/默认状态,则用户需要登录。用户登录后,我们将按钮置于选定状态。

因此,如果按钮处于选中状态,则用户需要注销。

通过这种方式,我们可以继续切换相同按钮的状态,进行两种不同的操作。

代码看起来像这样。

-(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;
}

您可以为正常/选定/突出显示/禁用状态的按钮指定标题/图像。 这可以用单个按钮完成你的工作。

答案 2 :(得分:1)

您可以使用addTargetremoveTarget更改目标操作,如related question中所述。

这里的问题是有一种优雅的方法来检测登录状态。你可以想到一个全局变量,但它是大多数的错误解决方案。

另一种选择是检查UIButton的{​​{1}}属性。

一种不错的方法是在Web应用程序中使用某种“会话”机制,这将为您提供应用程序范围内的状态。