2012-08-05 58 views
0

storyboardiOS的模式對話框的UITabBarController

我看明白「最好」的方法,從A或B過渡到的UITabBarController d(在我的應用程序的主界面) - 通過C.

有條件去

含義我希望以下所有內容均有效。

A -> C -> D 
A -> B -> C -> D 
A -> B -> D 
A -> D 

C是一個模式對話框,基本上詢問了一塊丟失信息的用戶,如果他們沒有在他們的個人資料設置。

我已經試過:

  1. 使用觸發模式賽格瑞從d - >下,在d的viewDidLoad中功能:

    ([self performSegueWithIdentifier:@"ShowNumberDialog" sender:self];) 
    
  2. 編程方式顯示C作爲在d模態在viewDidLoad中功能:

    (void)viewDidLoad 
    { 
        [super viewDidLoad]; 
    
        NSString *deviceNumber = [[UserModel sharedSingleton] deviceNumber]; 
        if ([deviceNumber isEqual:[NSNull null]]) { 
    
         UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
         UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"NumberDialog"]; 
         [vc setModalPresentationStyle:UIModalPresentationFullScreen]; 
    
         NSLog(@"Showing device number dialog"); 
         [self presentModalViewController:vc animated:NO]; 
        } 
    } 
    

這些以及我所做的其他「黑客」嘗試似乎都在起作用。所以我認爲我不瞭解我應該這樣做的基本原理。有人可以推薦更好的方法嗎?

回答

1

嘗試將您在ViewDidLoad中的代碼移至ViewDidAppear:(BOOL)animated。可能發生的情況是,您嘗試將模式對話框推送到程序中,同時轉換到Tab Page D仍然出現,這意味着應用程序會忽略您打開模式對話框C的請求,因爲它繼續加載D。ViewDidAppear:(BOOL)animated被稱爲當你的視圖最終對用戶可見並且完全加載時。

+0

這工作完美,謝謝! – amirpc 2012-08-05 23:52:38

+0

很高興工作!如果你不這樣做,你應該檢查XCode調試器的輸出窗口。您可能會注意到「無法在推送另一個視圖時推送視圖」或類似內容的消息。有時輸出窗口很有幫助! – 2012-08-06 02:11:01

0

所以基本上我不明白從D到C的「performSegue ...」。TabBar是由用戶觸發的,所以他必須點擊圖標才能來到這個控制器。

我把B和D C之間檢查信息是完整的 - 如果沒有 - > Segue公司以C,否則D.

你能看到這種方法的問題?