2015-09-25 52 views
0

我有一個customView。它有這樣的(只是舉例)的一些條件:在iOS開發中使用視圖的正確方法是什麼?

customView(viewsNeed: Bool) 

... 

if viewsNeeded { 
    self.addSubView(newView) 
    self.addSubView(newView2) 
} else { 
    self.addSubView(newView3) 
    self.addSubView(newView4) 
    self.addSubView(newView5) 
} 

,然後我可以在此查看添加到我的ViewController

self.view.addSubView(customView(viewsNeeded)) 

我想知道的是,我應該怎麼辦?寫出這樣的條件,或者爲此目的製作單獨的視圖。喜歡的東西:

視圖1

... 

self.addSubView(newView) 
self.addSubView(newView2) 

視圖2

... 

self.addSubView(newView3) 
self.addSubView(newView4) 
self.addSubView(newView5) 

並添加其中的一個在ViewController中:

if viewsNeeded { 
    self.view.addSubView(view1) 
} else { 
    self.view.addSubView(view2) 
} 

什麼樣的視圖中創建的是在什麼情況較好,我該如何決定這種事情?如果它是真實的,我需要一些非常寬泛的解釋和解釋。

+0

我更喜歡第二種方法,因爲它使視圖獨立。在第一個例子中,'viewsNeeded'參數使'customView'的行爲與外部狀態相關聯。 (但我絕不會在任何絕對意義上稱我的偏好爲「正確」。) –

+0

我認爲這取決於很多事情。例如:如果你有複雜變量部分的簡單視圖,你可以使用2個視圖,但是如果你有一個大的複雜視圖和一些不同的塊,你應該怎麼做?如果您同時擁有View的複雜View和複雜變量部分,那麼在這種情況下如何進行設計以使您的應用程序更好地適用於Perforce。 –

回答

1

如果一個視圖可以具有不同的狀態,那麼您將負責具有特定責任的視圖內的那些不同狀態。 UINavigationBar就是一個很好的例子。它有一個明確的目的,爲用戶提供導航上下文,但它的狀態(和上下文)可以使它看起來不同。

func pushNavigationItem(...) { 
    ... 
    if self.items.count > 1 { 
    // show backButton 
    } else { 
    // hide backButton 
    } 
} 

如果不同的觀點不爲共同的目標一起工作,我不會他們在一個容器視圖組在一起,而是單獨添加它們,依賴於一個視圖控制器您的需求。

override func viewDidLoad() { 
    if userDidBuyContent() { 
    // add view with bought content 
    } else { 
    // add view to buy content 
    } 
} 

而且一般來說,保持view-hierachy儘可能平坦是個好習慣。您介紹的視圖越少,您的應用將執行得越好。這個決定最終取決於你,但要記住一個視圖的目的是什麼以及子視圖是爲此目的做出了貢獻還是真的起到了某種其他目的。

0

您所描述的選項之間沒有概念上的區別。從MVC模式的角度來看,他們都有點不對。您不必手動添加視圖,視圖必須自己創建其結構。

+0

也許它錯了,但我不能添加UITapGestureRecognizer到我的ImageView,但我可以將它添加到UIView,所以有一些情況下,當你需要在視圖中添加視圖(ScrollView是更好的例子),並有肥大有一些表現或主要區別在這個選擇。 –

+0

爲什麼第二種方法是錯誤的,如果你自己創建了View,所以它「自己創建它的結構」,或者我出錯了? –

+0

是的,你是對的,實際上在兩種情況下視圖都會創建它自己。所以無論從我的角度來看,你都沒有違反任何已知的架構模式) – heximal

相關問題