2012-01-06 64 views
2

我需要從我的故事板執行segue。在這種情況下調用的方法是-[UIViewController performSegueWithIdentifier:sender:]。這種方法依靠storyboard屬性UIViewController來查找故事板(因此也是故障板)。如何使用以編程方式加載的故事板執行segue?

但是,當UIViewController未從故事板創建時,storyboard屬性未設置。而且由於它是隻讀的,因此我無法以編程方式將其加載到故事板中。

所以問題是:如何執行從編程加載的故事板的segue?

如果這是不可能的,那可能是因爲我的架構不正確。這裏是用例:

該應用程序是一個傳統的tabbar應用程序,其中每個選項卡都有自己的NIB文件。這8個標籤中的很多都是相當複雜的,並且可以從故事板中獲益很多,尤其是原型表格單元格和靜態表格。所以我想演變應用程序使用故事板。

但是,一個巨大的故事板似乎並不是一個好主意:它可以防止對應用程序進行漸進式更改,這將變得笨拙,這將使團隊成員難以獨立地在其選項卡上工作。

正確的模塊化水平似乎讓UITabBarController有它自己的具體故事板。這使得每個選項卡能夠按照自己的進度發展,並使每個開發人員都能夠更輕鬆地在他們的選項卡上工作,而且幾乎沒有源控制衝突。

到目前爲止,我的方法是包含UITabBarController及其各主子視圖控制器的主要nib文件。女兒視圖控制器從他們的viewDidLoad方法中加載他們的故事板。從那裏,他們不能執行他們的繼續。

另一種方法是從他們的故事板創建子視圖控制器,但是我怎樣才能將它們連接到UITabBarController?我在哪裏編程加載故事板?

感謝您的任何建議。

+0

參見[在IOS使用多個故事板] [1]。 [1]:http://stackoverflow.com/questions/8297701/using-multiple-storyboards-in-ios – 2012-01-06 14:12:27

回答

0

在segue上做一個引用並將指針值保存在一個singleton類中。然後使用保存在singleton類中的指針引用,訪問segue並隨意加載它。下面是一個示例代碼,其中我從單個storyboard類加載segue視圖,但每個視圖都有單獨的視圖控制器.h和.m文件,它們具有適當的連接。 (我用正式的協議,因此線shareVC.delegate =自我;是有

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
if ([segue isKindOfClass:[UIStoryboardPopoverSegue class]]) { 
if (self.currentPopover != nil) { 
[_currentPopover dismissPopoverAnimated:YES]; 
self.currentPopover = nil; 
} 

    UIStoryboardPopoverSegue *popSegue = (UIStoryboardPopoverSegue *)segue; 
    self.currentPopover = popSegue.popoverController; 
} 

if ([segue.identifier compare:@"ShareModal"] == NSOrderedSame) { 
    //the share controller is being presented modally, probably iphone 

    UINavigationController *shareNavController = segue.destinationViewController; 
    myViewController *shareVC = (myViewController *)[shareNavController topViewController]; 

    shareVC.delegate = self; 


} else if ([segue.identifier compare:@"SharePopover"] == NSOrderedSame) { 


    FollowersViewController *followerVC = segue.destinationViewController; 
    followerVC.delegate = self; 



} else if ([segue.identifier compare:@"StartScreenSegue"] == NSOrderedSame) { 

UINavigationController *startNavController = segue.destinationViewController; 
StartViewController *startVC = (StartViewController *)startNavController.topViewController; 
startVC.delegate = self; 
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationOpenUrlNotification object:nil]; 
    } 
} 

希望這有助於:)

+0

「作出的SEGUE參考」 恰恰是問題。如果我能做到這一點,視圖控制器可以在需要時執行此操作。此外,我看不出單身人士會提供什麼價值。此外,我有很多賽段,所以需要一噸單身!此外,無論如何,單身是邪惡的。 – 2012-05-22 13:26:13

+0

這裏是我如何管理我的segues的示例代碼 – 2012-05-22 13:30:56

+0

我已經使用UITabBarController上的類別以一種通用的方式解決了該問題。我的解決方案可能值得在某處發佈。我會在週末寫下 – 2012-05-22 13:33:33

相關問題