2014-01-13 16 views
18

我有一個用SWRevealViewController製作的邊欄菜單。SWRevealViewController - 手動切換到另一個視圖?

邊欄中的菜單元素之一是「登錄」。它打開登錄視圖(通過自定義的SWRevealViewController segue)。

我想以編程方式切換到用戶成功登錄後的另一個視圖。我該怎麼做?

UPDATE,我的代碼:

ViewController *vc = [[ViewController alloc] init]; // this is main front ViewController 
SWRevealViewController *revealController = self.revealViewController; 
[revealController setFrontViewController:vc animated:YES]; 

這之後,我得到的只是空白屏幕。我究竟做錯了什麼?我覺得這是錯誤的:

ViewController *vc = [[ViewController alloc] init]; 

那麼訪問已經加載的視圖控制器的正確方法是什麼? (它由SWRevealViewController加載在應用程序啓動的前端控制器)

+0

你能告訴我如何設置SWREvealview控制器作爲根視圖controlelr通過代碼...請 – iOSDeveloper

回答

14

使用 - (void)setFrontViewController:(UIViewController *)frontViewController animated:(BOOL)animated;方法

SWRevealController有它自己的屬性,你可以從任何UIViewController的訪問:

SWRevealViewController *revealController = self.revealViewController; 

您可以查看示例項目在它的GitHub repository: https://github.com/John-Lluch/SWRevealViewController

+0

謝謝!但是請你解釋一下,我怎樣才能從其他課程訪問這個方法? (我是新來的iOS)我已經有'#import「SWRevealViewController.h」 - 但我怎麼能得到SWRevealViewController的當前實例調用它的方法? – oyatek

+0

你在哪裏創建啓動時提到的控制器? – vburojevic

+0

你可以看看圖書館GitHub頁面上的示例項目,我已經更新了我的答案 – vburojevic

5

試試這個:

ViewController *vc = [[ViewController alloc] init]; // this is main front ViewController 
UINavigationController* navController = (UINavigationController*)self.revealViewController.frontViewController; 
[navController setViewControllers: @[vc] animated: YES]; 
// [navController pushViewController:vc animated:YES]; // use this if you want to stack the views 
[self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES]; 
+0

u能告訴我如何設置SWREvealview控制器通過代碼根視圖controlelr ......請 – iOSDeveloper

+0

我還沒有編程實現了它,但它應該是這樣的:用' - (ID)initWithRearViewController :(UIViewController *)rearViewController frontViewController:(UIViewController *)frontViewController;'和「MenuViewController」作爲rearViewController和NavigationController作爲frontViewController。希望這可以幫助 – benaneesh

+0

@benaneesh我正在通過presentViewController()移動到視圖控制器。在viewDidLoad()中,我實現了這個方法,但總是在self.revealViewController()的viewcontroller中獲得一個nill值。任何想法?? –

29

試試這個:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
SecondViewController *rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"]; 

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootViewController]; 
[navController setViewControllers: @[rootViewController] animated: YES]; 

[self.revealViewController setFrontViewController:navController]; 
[self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES]; 

工作:-)

+0

也爲我工作,謝謝! –

+1

至於誰的人有不同的故事板,這是我的代碼看起來像(從上面的代碼中引用):UIStoryboard *分鏡= [UIStoryboard storyboardWithName:@「OrderHistory」 束:零] UINavigationController * navController = [storyboard instantiateInitialViewController]; [self.revealViewController setFrontViewController:navController]; [self.revealViewController setFrontViewPosition:FrontViewPositionLeft animated:YES]; –

+0

每次調用mainviewcontroller方法的子視圖的時候,即使他們之間沒有任何導航,任何人都可以幫助我嗎? :( –

4

有一個新的API - (void)pushFrontViewController:(UIViewController *)frontViewController animated:(BOOL)animated;

據我所知,這是正確的動畫最優雅的方式手動切換視圖控制器。

// get the view controller you want to push to properly. 
// in this case, I get it from Main.storyboard 
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
UIViewController * vc = [sb instantiateViewControllerWithIdentifier:@"SignInViewController"]; 

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:vc]; 

[navController setViewControllers: @[vc] animated:NO]; 
[self.revealViewController pushFrontViewController:navController animated:YES]; 

如果您在目標VC不導入SWRevealViewController,想推回:

// get your vc properly 
[self.navigationController setViewControllers:@[vc] animated:YES]; 

請注意,[self.navigationController showViewController:vc sender:self];有相同的結果,但不要用這個,因爲這在導航堆棧上創建一個新的視圖控制器,這在使用SWRevealViewController時基本沒有意義。

+0

你好@布萊恩我需要你的幫助! –

+0

嗨,我能幫忙嗎? – Brian

+0

請檢查這個我的問題http://stackoverflow.com/questions/32115308/swrevealviewcontroller-推 - 從 - 子視圖 –

2

這一個對我的作品完美

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
ViewController *rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewController"]; 

UINavigationController *navController = [storyboard instantiateViewControllerWithIdentifier:@"NavController"]; 
[navController setViewControllers: @[rootViewController] animated: YES]; 

[self.revealViewController setFrontViewController:navController]; 
[self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES]; 
+0

)我正在通過presentViewController()移動到視圖控制器,並且在viewDidLoad中(),我採取這種方法,但始終,我在我的ViewController在self.revealViewController()。任何想法? –

+0

得到一個nill值我不清楚。能否請您解釋嗎? – Evana

+0

你可以看看我的這個問題http://stackoverflow.com/q/35699581/5395919。我在這個問題上很掙扎。 –

6

這裏是setFrontViewController解決方案的斯威夫特版本:

if let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("SecondViewControllerStoryBoardID") as? SecondViewController { 
    let navController = UINavigationController(rootViewController: secondViewController) 
    navController.setViewControllers([secondViewController], animated:true) 
    self.revealViewController().setFrontViewController(navController, animated: true) 
} 
1

@Evana有一個很好的答案,但是我的情況,其參數傳遞到destViewController,我需要改進它如下。完全按照她的例子,我注意到DestViewController的viewDidLoad被調用了兩次。 'selectedId'首先爲0,只有第二次調用'selectedId'正在接收我的標籤值。

因此,爲了使清潔器導航,所述DestViewController必須從navController獲得,所以不存在冗餘呼叫。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 

UINavigationController *navController = [storyboard instantiateViewControllerWithIdentifier:@"DestNavController"]; 

DestViewController *destViewController = (DestViewController*)[[navController viewControllers] objectAtIndex:0]; 

destViewController.selectedId = ((UIButton*)sender).tag; 

[self.revealViewController setFrontViewController:navController]; 
+0

我有一個問題,我不知道如何解決它。你能查看這個bro @teapeng嗎? http://stackoverflow.com/questions/42573338/swrevealviewcontroller-button-not-work-after-clicking-back-button-from-another-v –

相關問題