2011-11-17 68 views
-2

嗨,我正在創建一個閱讀器應用程序,它用於在Facebook和Twitter上共享文本。關於iPhone中的通知疑問

每件事情都很完美。我的客戶想要在設置頁面中輸入Facebook和Twitter的登錄信息。登錄和註銷也必須在那裏完成。
只有登錄後用戶才能共享文本,Twitter和Facebook都有登錄按鈕和註銷按鈕,登出按鈕隱藏在登錄按鈕後面。

如果用戶單擊登錄按鈕並且登錄過程完成,則註銷按鈕將取消隱藏,並且登錄按鈕隱藏,反之亦然。

了我的一切工作正常,但問題是,當我重定向到一個頁面,來設置頁,按鈕能見度被重置爲默認:
如果用戶登錄,註銷按鈕取消隱藏。但是當用戶轉到任何其他頁面並返回時,登錄按鈕將再次可見。這是因爲當打開另一個頁面並返回時,它會在設置頁面中作爲新案例處理。 我想我可以通過提供通知或NSMutableDictionary來解決這個問題。但我不知道該怎麼做。我對登錄Facebook和Twitter的代碼是:

註銷Twitter並

-(IBAction)_clickbtntwitterlogeout:(id)sender 
{ 
    _btntwitterLogeout.hidden = YES; 
    _btnTwitter.hidden=NO; 

    [_engine clearAccessToken]; 
    [_engine clearsCookies]; 
    [_engine setClearsCookies:YES]; 
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"authData"]; 
    [[NSUserDefaults standardUserDefaults]removeObjectForKey:@"authName"]; 
    NSLog(@"%@",[[NSUserDefaults standardUserDefaults]valueForKey:@"authName"]); 
    NSLog(@"%@",[[NSUserDefaults standardUserDefaults]valueForKey:@"authData"]); 

    [_engine release]; 
    _engine=nil; 

    NSHTTPCookie *cookie; 
    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
    for (cookie in [storage cookies]) 
    { 
     NSString* domainName = [cookie domain]; 
     NSRange domainRange = [domainName rangeOfString:@"twitter"]; 
     if(domainRange.length > 0) 
     { 
      [storage deleteCookie:cookie]; 
     } 
    } 

} 

logein Twitter的認證

-(IBAction)_clickbtnTwitter:(id)sender 
{ 

    _btntwitterLogeout.hidden = NO; 
    _btnTwitter.hidden=YES; 
    if (_engine) return; 
    _engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate: self]; 
    _engine.consumerKey = kOAuthConsumerKey; 
    _engine.consumerSecret = kOAuthConsumerSecret; 

    UIViewController   *controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self]; 

    if (controller) 
     [self presentModalViewController: controller animated: YES]; 
    else { 
     [_engine sendUpdate: [NSString stringWithFormat: @"Already Updated. %@", [NSDate date]]]; 
    } 
} 

一樣,因爲對於Facebook。 在此先感謝。

+3

在你的問題中的「英語」基本上是不可讀的。 –

+0

標點符號(即captial letters和full stop)可以真正改善介紹的段落。如果它們更短,它們也會更好。 – Tom

+0

我試圖編輯他的文本,使其可讀(編輯請求正在等待) –

回答

0

您應該有一個引用,用於將登錄的用戶數據存儲在處理登錄(和註銷)的視圖上的變量。

您是否在UINavigationController內使用UIViews,對嗎?這就是我所假設的。如果沒有,澄清,我會盡力解決相應的答案。

這裏有一個簡單的工作流程:

  • 用戶登錄
  • 一旦登錄被接受,創建(或更新)一個「用戶信息」的對象(可以是一個專用類或NSMutableDictionary
  • 做一個在你的登錄視圖中引用該對象
  • 創建一個新的視圖(你稱之爲「下一頁」),引用同樣的「userinfo」對象(你應該存儲OAuth鍵,用戶名,id和那種類型的東西)在這個新的觀點
  • 一旦用戶返回到第一個視圖
  • 推新視圖

,您認爲應檢查「用戶信息」對象,並採取相應的行動。也許使用viewWillAppear:委託方法。

希望它有幫助!

+0

是使用uiviews,設置頁面是主視圖的子視圖,所以在主視圖中沒有問題,但是當我重定向到另一個視圖控制器並返回時,它仍保留在默認的posisitin中,這些更改已經消失,但登錄並且註銷功能在那裏沒問題,但隱藏和取消隱藏按鈕已更改。 – ICoder

+0

一旦你創建了你的「設置」視圖,你必須告訴它用戶是否登錄。一個簡單的屬性可以做到這一點。在設置子視圖上,在viewWillAppear:方法中,您可以檢查該屬性並相應地隱藏/顯示按鈕。 –

1

爲什麼不使用NSUserDefaults來存儲登錄狀態。
做這種方式
如果登錄成功

[[NSUserDefaults standardUserDefaults] setObject:@"LOGGED_IN" forKey:@"FB_LOGIN_STATUS"]; 

    [[NSUserDefaults standardUserDefaults] setObject:@"LOGGED_IN" forKey:@"TWT_LOGIN_STATUS"]; 

其他

[[NSUserDefaults standardUserDefaults] setObject:@"LOGGED_OUT" forKey:@"FB_LOGIN_STATUS"]; 

    [[NSUserDefaults standardUserDefaults] setObject:@"LOGGED_OUT" forKey:@"TWT_LOGIN_STATUS"]; 

viewWillAppear中視圖控制器的方法,檢查這些對象來決定哪些按鈕應該是可見的,並應該隱藏。

希望它有幫助!

+0

所以我把這個代碼放在哪裏?在按鈕點擊登錄和註銷Twitter和Facebook的權利?還有一個疑問在視圖中會出現如何設置代碼?我對ios開發新穎,這就是爲什麼。謝謝。 – ICoder

+0

要使用像Bharat J狀態那樣的'NSUserDefaults',你應該使用'viewWillAppear:'方法來讀取NSUserDefaults的值(http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation /Classes/NSUserDefaults_Class/Reference/Reference.html)來檢索記錄的信息。並相應地顯示/隱藏按鈕。 –

+0

@Sergio Moura是啊謝謝你的迴應,我正在嘗試它,但沒有運氣 – ICoder