2011-07-02 62 views
2

好了,所以此刻我有一个正确的按钮,登录的用户的导航控制器改变。UINavigation栏按钮,IBAction为根据点击

但是我想更改登录按钮注销一旦经过单击并且此注销按钮将调用不同的IBAction。

帮助可视化此。

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

我想要做的是改变按钮注销和呼叫注销:(id)发送者,当它被点击。

这是可能的。

谢谢。

回答

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]; 
} 
+0

它种作品它会将标题更改为注销。但是当我点击它。它出现了这个错误[HubViewController注销]:无法识别的选择发送到实例0x791b810 2011-07-02 17:07:12。*** FaceDirectory [58935:207] ***由于未捕获异常'NSInvalidArgumentException',原因:' - [HubViewController注销]:无法识别的选择器发送到实例0x791b810' ***第一次调用堆栈: – mintuz

+0

@明图兹:这是因为你还没有设置'-logout'方法。创建并且错误应该消失。 – PengOne

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

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

1

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

这里的问题是有一个优雅的方式来检测登录或不登陆的状态。你可以想象一个全局变量,但是这是一个不好的解决方案的时代。

另一种替代方法是检查UIButtonNSString *title属性。

一个不错的方法是在Web应用程序中有一种“会话”机制,它将为您提供在整个应用程序中的状态。