2012-10-31 63 views
9

我一直在用xib文件開發所有東西,因爲我們需要支持iOS4。故事板是否強迫你寫出醜陋的代碼?

現在我們終於僅支持iOS5的和iOS6的,所以我決定給故事板一試,所以一切都很好,方便,但我發現自己做了很多這樣的代碼:

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

    if ([segue.identifier isEqualToString:@"AddPlayer"]) { //Ugly 

     UINavigationController * navigationController = segue.destinationViewController; 
     PlayerDetailViewController * playerDetailsViewController = [navigationController viewControllers][0]; //Super Ugly 
     playerDetailsViewController.delegate = self; 
    } 
} 

我不知道你們,但我發現這個代碼非常醜陋,容易出錯。

有沒有更好的方法來處理故事板?我應該回到xib文件嗎?

+0

你能解釋一下爲什麼你說的醜嗎?你是否指的是if語句的比較? –

+0

不是那麼難看我想:)只是不尋常 – NeverBe

+1

我發現真的很醜陋,你必須在故事板中輸入隨機字符串,然後開始做比較,因爲我是非常難以維護,耦合和容易出錯。遍歷控制器層次結構也是如此 – Ecarrion

回答

6

我在故事板上工作過很多,我們在我工作的最後一個應用程序中工作,是的,我同意樣板代碼在一段時間後變得相當惱人,但據我所知,使用prepareForSegue是傳遞參數的唯一方法當使用segues時。 您無法從故事板本身分配自定義視圖控制器上的屬性/代理。

  • 如果我只針對iOS 5 & 6,我會回去使用XIB嗎? 它 取決於

如果我必須建立一個小 - 中的應用程序(沒有太多的意見,並沒有很多它們之間的交叉導航),我肯定會用故事板。但是當你有很多觀點並且在它們之間有很多來回導航時,保持故事板的整潔和整潔真的變得很複雜,並且感覺你正在強迫自己使用實際上並不是最好的東西。

另一方面,我覺得故事板可以讓您在從頭開始時更容易地瞭解應用程序的流程和一般外觀,甚至可以使用它們創建實際看起來像真實的東西。

因此,本質上它歸結爲開始項目時您的需求。

編輯:

另一個要考慮到:如果您使用SVN/Git的或任何其他VCS與團隊工作,故事板文件衝突是總婊子

+2

+1版本控制文件與故事板衝突。蘋果是否認爲多人可能不得不編輯故事板? Geez –

+0

我從解決故事板衝突中發現了很多令人頭痛的問題......只是在下次提交中再次找到它們 – jere

2

這就是野獸的性質。使用Cocoa約定的Objective-C產生 - (希望)自我記錄,儘管是冗長的代碼。看看你的例子,我確定你的意圖沒有問題。

現在,如果你想使它變得漂亮,你可以將所有這些封裝到一個宏中,以便將它壓縮爲一行。雖然它可能更漂亮,但它肯定會增加維護野獸的不必要的複雜性。最終用戶並不關心代碼有多漂亮 - 除非它阻止添加新功能。

至於討論故事板...他們肯定是不同的,但現在已經使用了六個月,我很欣賞把我所有的筆尖放在一個集中的地方,而不是花時間尋找單個文件。通過可視化佈局來查找事物,然後解析駱駝式的文件名更容易。這就是我。

我的建議,給他們時間。在幾個月內,如果你發現他們禁止你的工作流程,那麼通過一切手段,回到個別的筆尖。他們不會去任何地方。至少一段時間。

只是我的兩分錢。祝你好運!

+1

我同意產品本身對最終用戶至關重要,但作爲一名工程師,我不得不擔心比最終產品更多的東西。 – Ecarrion

5

我同意這是一個醜陋的代碼,並平滑我的視野,我創建的宏:

#define WhenSegueIdentifierDo(segueIdentifier, block) if([segue.identifier isEqualToString:segueIdentifier]) block(); 

在我prepareForSegue

WhenSegueIdentifierDo(kModalVC1ToVC2,^
{ 
    //code 
}); 

WhenSegueIdentifierDo(kModalVC1ToVC3,^
{ 
    //code 
}); 

我也使用常量,而不是硬編碼字符串(儘管我不能在故事板上使用它們)以使它更美觀。我也使用約定:ķ + 型過渡 + 原點視圖控制器名稱的 + + 目的地視圖控制器名稱

您還可以使用的

navigationController.topViewController 

代替

[navigationController viewControllers][0]; 

只是我的2美分...

+0

這種塊方法其實非常簡潔,但我決定堅持使用nibs/xibs。我不喜歡將所有視圖都放在一個文件中的想法。這是非常難以維繫的大型團隊! – Ecarrion

+0

很酷的宏! – jere