2013-04-24 12 views
25

我有一個以導航控制器開始的應用程序。該導航器可以打開模態視圖控制器:如何執行沒有轉換動畫的segue

- (void)openModalController:(id)sender 
{ 
    [self performSegueWithIdentifier:@"SegueIdentifier"]; 
} 

但是,當用戶打開使用URL方案的應用,我想和開模態控制器提出申請。所以我加了一些方法和嘗試:

// Controller 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; // animated == NO in initial loading 

    if (_shouldOpenModalController) { 
     [self openModalController:nil]; 
    } 
} 

- (void)setShouldOpenModalController:(BOOL)flag 
{ 
    _shouldOpenModalController = flag; 
} 

// AppDelegate 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    if (launchOptions) { 
     UINavigationController *nc = (UINavigationController *)self.window.rootViewController; 
     MyViewController *c = (MyViewController *)[ns topViewController]; 
     [c setShouldOpenModalController]; 
    } 
} 

但這裏是一個問題:openModalController:執行與故事板的過渡動畫我安裝Segue公司。如何在沒有動畫的情況下完成?這項任務有另一種方法嗎?

+0

子類'UISegue'並重寫'perform'。 – Martol1ni 2013-04-24 13:45:18

+0

@ Martol1ni下次我想用動畫打開它...現在我正在使用' - (id)instantiateViewControllerWithIdentifier:(NSString *)標識符',但我不認爲這是最好的解決方案 – voromax 2013-04-24 13:49:26

+0

您正在使用塞格斯,對吧? – Martol1ni 2013-04-24 15:21:31

回答

32

複製Storyboard中的segue併爲第二個複製另一個ID。

然後,您可以更改新版本中的轉換。

+1

要創建一個更多的segue來嘗試跳過它的過渡動畫......必須有其他方式,我寧願手動打開視圖控制器,而不是創建自定義漸變過渡而不使用動畫。 – voromax 2013-04-24 15:33:08

+14

你不需要一個自定義的segue,模態轉換上有一個'animates'複選框。 – 2013-04-26 00:02:46

+0

感謝您的回答。這可以工作。 +1 – voromax 2013-04-26 08:18:15

7

我使用這個片段在viewDidLoad請求授權:

[UIView setAnimationsEnabled:NO]; 
self.view.hidden = YES; 

[self performSegueWithIdentifier:@"segue_auth" sender:self]; 

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
    [UIView setAnimationsEnabled:YES]; 
    self.view.hidden = NO; 
}); 

授權時,背部過渡動畫,因爲我想要的。

+2

此解決方案在Xcode 6+中工作,而其他解決方案不支持不允許延期重複)。 – ruliak 2015-08-14 10:47:34

+0

@ruliak我沒有複製segue。我想你想評論不是這個答案:) – k06a 2015-08-14 19:31:10

+0

我希望我能投兩次。一年後我又回到這裏,並再次使用這種方法!忘記了我已經找到它了! – davidethell 2016-02-26 22:29:50

5

另一種方式,我們可以

YourViewController *aYourViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"aYourViewControllerIdentifier"]; 
[self.navigationController pushViewController:aYourViewController animated:NO]; 

,並添加@"aYourViewControllerIdentifier"在你的故事板,查看控制器。

+1

這更像是一種ha。。如果我們已經有了一個segue,我們不應該通過代碼實例化視圖控制器。有一個segue的全部要點是避免在代碼中實例化視圖控制器。 – Kesava 2016-09-14 10:44:37

19
self.performSegueWithIdentifier("loginSegue",sender: nil) 

enter image description here