2011-07-02 111 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應用程序中有一種「會話」機制,它將爲您提供在整個應用程序中的狀態。