2012-04-19 80 views
4

我一直在玩iOS的自定義細節,並試圖儘可能地使用它們,以使應用程序的完整工作流在我的故事板中可視化。當我創建一個popover segue時,它知道觸發segue的視圖(它必須爲了定位popover),但是當我創建一個自定義的segue時,我找不到一種方法來做同樣的事情。有沒有一種方法可以訪問在自定義細節中啓動segue的視圖?另外,是否有一種方法可以將自定義參數從Interface Builder傳遞給segue,就像可以將運行時參數傳遞給視圖控制器一樣?在你的視圖控制器如何將額外的參數傳遞給自定義的segue?

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 

...:

回答

6

您可以訪問已通過實現方法觸發自定義SEGUE觀。

在該方法上,如果使用Interface Builder將其鏈接,則發件人的值將是觸發segue的視圖。實現此方法時,建議您要查詢的賽格瑞已經通過以下方式被觸發:

if ([[segue identifier] isEqualToString:@"segueid"]) 

...其中「segueid」將是你所賜給在Interface Builder您SEGUE標識符。

關於第二個問題,我不知道在Interface Builder中爲segue指定參數的方法,但是您可以使用相同的「prepareForSegue」方法在運行時將它們從View Controller中傳遞。

想象一下,您的自定義賽格瑞有一個名爲animationStyle財產

如果執行方法,你可以有以下幾種:

- (void)perform 
{ 
    switch (self.animationStyle) { 
     case 0: 
      // TODO Perform animation type 0 
     case 1: 
      // TODO Perform animation type 1 
    } 
} 

然後,讓我們說你有幾個視圖控制器,你想使用該自定義賽格。在第一個可以實現performSegue方法,如:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"yourCustomSegueID"]) { 
     ((YourCustomSegueClass *)segue).animationStyle = 0; 
    } 
} 

雖然在第二視圖控制器就可以實現它想:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"yourCustomSegueID"]) { 
     ((YourCustomSegueClass *)segue).animationStyle = 1; 
    } 
} 

...那麼有效,要重複使用相同的自定義爲了得到不同的效果而使用segue類。 IB不會讓你直接配置segue,但據我所知,這是沒有辦法的。

+0

這很好,當自定義segue特定於某個視圖控制器時,但它不允許我創建可重複使用的自定義segue,例如執行自定義動畫並從IB配置其參數。 – SoftMemes 2012-05-04 08:36:16

+0

我不確定我是否理解你的問題。我知道我在故事板的不同點重複使用自定義的細節。我需要關注的唯一事情就是在每個要使用它的View Controller上實現「prepareForSegue」方法,然後將所需的參數分配給那裏的segue。當然,您可以通過不同的視圖控制器傳遞不同的參數來獲得所需的結果。 – flainez 2012-05-04 09:12:17

相關問題