好的,所以目前我的导航控制器有一个右键,可以记录用户。
但是我想在点击后将登录按钮更改为注销,此注销按钮将调用不同的IBAction。
帮助想象这一点。
默认情况下,导航控制器上有一个右键,表示登录,按下此登录按钮后,按下ibaction登录:( id)发件人。
我想要做的是将按钮更改为注销并在点击时调用注销:(id)发件人。
这是可能的。
感谢。
答案 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)
您可以使用addTarget
和removeTarget
更改目标操作,如related question中所述。
这里的问题是有一种优雅的方法来检测登录状态。你可以想到一个全局变量,但它是大多数的错误解决方案。
另一种选择是检查UIButton
的{{1}}属性。
一种不错的方法是在Web应用程序中使用某种“会话”机制,这将为您提供应用程序范围内的状态。