2016-02-13 47 views
0

我有一個應用程序有一個登錄視圖,然後在登錄成功後,我想有一個側面菜單的視圖。 我使用SWRevealViewController來製作幻燈片菜單。 但正如我所說的問題是登錄視圖將是第一個觀點不是SWRevealViewController。 我試圖在prepareForSegue方法內執行以下操作。SWRevealViewController在登錄視圖後

SWRevealViewController *revealViewController; 
[revealViewController initWithRearViewController: [self.storyboard instantiateViewControllerWithIdentifier:@"MenuTableViewCell"]frontViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"]]; 

這是行不通的。這是我有prepareForSegue方法中唯一的代碼,我刪除if語句,因爲我只有一個LoginView內一個賽格瑞所以我想我不需要IF。 我應該刪除故事板的SWRevealViewController?或登錄以SWRevealViewController 我不知道該怎麼辦讓SEGUE。 有沒有解釋的情況使用SWRevealViewController意見裏面不是第一個視圖。 我正在構建這個應用程序的iOS爲iPhone的目標C. 請幫忙。 謝謝。

+0

你可以試試這個對我有用。 [Answer](https://stackoverflow.com/a/48959896/4845562) – kalpesh

回答

3

你應該做你的故事板的層次結構是這樣的。

  • 將一個的ViewController並更改類SWRevealViewController。
  • 拖動一個ViewController嵌入NavigationController。將課程名稱更改爲LoginViewController
  • 將您的導航控制器的故事板ID更改爲「LoginNavigationController」。

  • 分配新的自定義命名賽格瑞sw_front從SWRevealViewController到NavigationController和變化類SEGUE到SWRevealViewControllerSegueSetController。

  • 將具有的TableView作爲一個子視圖這是您的MenuViewController用於邊欄的控制器。

  • 分配到MenuViewController從SWRevealViewController命名sw_rear新的自定義賽格瑞和變化類SEGUE到SWRevealViewControllerSegueSetController。

  • 現在拖動一個視圖控制器名爲HomeViewController嵌入NavigationController與標識符 「」 與類別SWRevealViewControllerSeguePushController指定自定義SEGUE。

  • 將NavigationController的故事板ID更改爲「HomeNavigationController」。

這應該是故事板中的設置。

Storyboard structure

現在這裏是編碼部分:

In SWRevealViewController.m 

- (void)viewDidLoad{ 

[super viewDidLoad]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userSignedInSuccessfully) name:kUserSignedInNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userSignOutSuccessfully) name:kUserSignedOutNotification object:nil]; 

    // this flag should be maintained in user defaults 
    if(iSUserSignedIn){ 

    //Show Home page if user is already signed in 
    [self showHomeScreen]; 
    } 
} 

#pragma mark - Show Home screen 

-(void)showHomeScreen 
{ 
    UINavigationController *navigation = [[UIStoryboard storyboardWithName:kStoryboardName bundle:nil] instantiateViewControllerWithIdentifier:@"HomeNavigationController"]; 

[self setFrontViewController:navigation]; 
[self setFrontViewPosition:FrontViewPositionLeft]; 
} 

-(void)showLoginScreen{ 

    UINavigationController *navigation = (UINavigationController *)[[UIStoryboard storyboardWithName:kStoryboardName bundle:nil] instantiateViewControllerWithIdentifier:@"LoginNavigationController"]; 

    [self setFrontViewController:navigation]; 
    [self setFrontViewPosition:FrontViewPositionLeft]; 
} 

現在,當用戶簽署,第一次保存標誌iSUserSignedIn用戶默認值,並張貼此通知。

//Post notification for successful sign in 
[[NSNotificationCenter defaultCenter] postNotificationName:kUserSignedInNotification object:nil]; 

當用戶退出設置標誌iSUserSignedIn到零,並張貼此通知。

//Post notification for successful sign out 
[[NSNotificationCenter defaultCenter] postNotificationName:kUserSignedOutNotification object:nil]; 
+0

在登錄視圖中,如果用戶登錄成功,我應該以編程方式編寫segue嗎?登錄成功後應該實例化哪個視圖? mene或homeview?我真的很感謝你的回答!非常感謝! –

+0

對不起,我認爲登錄成功後我可以擁有(showHomeScreen)方法。 –

+0

它沒有移動到登錄視圖,直到我改變主視圖實例化(showHomeScreen)方法的方式-----這裏是如何:UIViewController * vcNew = [[UIStoryboard storyboardWithName:@「Main」bundle:NULL] instantiateViewControllerWithIdentifier :@ 「HomeViewController」]; //切換前視圖控制器並顯示 [self.revealViewController setFrontViewController:vcNew]; [self.revealViewController setFrontViewPosition:FrontViewPositionLeft animated:YES]; –