2013-12-13 30 views
2

我是iOS開發新手,擁有幾年Android經驗。我直接開始使用XCode 5和Storyboard範例。我喜歡直觀的方式來繪製應用程序的流程,但恕我直言,它並不真正強制重用組件,或者我不知道如何去做。Storyboard內的組件重用

我有一個實際的問題,如下所示:代替典型的主 - 細節方法,我有一種情況,在這種情況下,單擊TableView單元強制推送到另一個TableView,它看起來相同並且行爲同樣的方式。我希望在整個應用程序中重複使用兩種特定類型的TableViewCell,因此我不能只複製第一個TableViewController幾次。我需要在一個TableViewCell類型中進行更改,以便受到影響,對於Tableview的外觀和行爲也是如此。有點像重用組件,你會得到我希望的圖片。

我試圖在一個單獨的xib文件中創建一個自定義TableView和TableViewCell,並將它連接到一個自定義控制器類。然而,當我想在故事板中重新使用控制器類時,我無法從單元格移動到下一個單元格,因爲只有視圖控制器被顯示,但內部沒有視圖。

也許,我這樣做都是錯誤的。也許,我應該製作一個單一的控制器,如果可能的話,強迫它控制自己,不知道。

你會怎麼做?

+0

你可以嘗試,更具體嗎?添加一些關於你正在嘗試做的代碼... – sergio

+0

嗨。你是否僅使用XIB單元格?或者你也有自定義類? –

+0

歡迎來到iOS開發的精彩世界!我建議重新考慮你是否真的想使用Storyboard:http://stackoverflow.com/questions/9404471/when-to-use-storyboard-and-when-to-use-xibs/19457257#19457257 –

回答

0

您可以從didselected做程序上的Segue公司.....

#進口 「someVC.h」

然後,當你想順着接下去新的VC

// Create a VC and remember to set the Storyboard ID of someVC (example someVCID) 
someVC *newView = [self.storyboard instantiateViewControllerWithIdentifier:@"someVCID"]; 

// Can't remember how this works but you can change the Transition method 
// newView.modalTransitionStyle = UIModalTransition; 

// If you want to pass data, setup someArray in the someVC .h with @property (nonatomic, strong) NSArray *someArray; 
newView.someArray = MyLocalArray; 

// Animated or not 
[self presentViewController:newView animated:NO completion:nil]; 
+0

+1 。這也是我推薦的解決方案,但是爲了不混淆OP,我想指出,這根本不使用segue。這是使用'UINavigationController'的較早的方式,您只需實例化下一個VC並手動推送它。當賽車不適合您的需求時,降級到較低級別沒有任何問題! – Taum

+0

那麼如果OP實際上使用'UINavigationController',最後一行應該是'[self.navigationController pushViewController:newView animated:YES]':) – Taum

0

如果你要做的是在同一個UITableView上執行segue,你可以通過檢查this answerRob

我會報告它是什麼包含完整性:

如果您在使用動態小區的原型,你明明可以做從表視圖單元格到控制器的SEGUE 沒有任何問題。

make segue from cell to controller

當你讓你SEGUE,你結束了:

circular segue

但讓我們想象第二個是有一些原因,不 爲你工作,例如你不能從單元格中選擇一個繼續(例如,對於 的例子,你需要在選擇單元格時調用didSelectRowAtIndexPath而不是 )。在這種情況下,您無法使用先前的技術。

有在這種情況下兩個選擇:

  1. 由於pointed out by Chris,如果只支持iOS 6以上,使用上述技術,但(一)請確保您的 didSelectRowAtIndexPath使用selfsender然後有 shouldPerformSegueWithIdentifier只允許segue如果sender == self(因此當sender是table view cell的時候,它會被取消);

  2. 也許更簡單,根本不定義賽格瑞,有你didSelectRowAtIndexPath手動 instantiateViewControllerWithIdentifier,然後按/本 該視圖控制器爲合適;或

  3. 您可以使用以下解決方法:簡單地說,向視圖控制器添加一個按鈕(將其向下拖動到底部的 ),它不會顯示在視圖中,但你可以使用它的 segues。因此,首先,拖動圓形按鈕控制器的酒吧在 現場的底部:

    drag button

    現在,您可以從該按鈕SEGUE到您的視圖控制器:

    make segue from hidden button

    因此,你最終得到自我指涉賽格:

    final button segue

    你必須給這個segue一個標識符,所以你可以通過performSegueWithIdentifier以編程方式調用它 ,但它的工作原理。不是 最優雅的解決方案,但我認爲它比在故事板上有一個額外場景 要好。

這些都不是理想的,但你有很多選擇。

0

以及..在IOS想想不同,如果我是你,我會創建多個ViewController,即使他們幾乎是相同的,並創建一個自定義單元格級,使該小區需要配置塊。 現在每個ViewController((或TableViewController)),要重複使用相同的自定義UITableViewCell,只是把它傳遞什麼是針對每種情況略有不同,而且你還可以創建一個BaseTableViewController,將有一般的配置,並在每個ViewController通過自定義您需要的更改。想想看,當你看故事板時,你將能夠看到你所有的工作流程,當出現問題時你將能夠進行調試,如果你有使用你的建議,調試將會是我想象的真正的痛苦。

無論如何,試試看,並詢問更多,如果您需要進一步澄清。