2009-10-13 42 views
1

我有關於Nib和UISegmentedControls的最佳實踐類型的問題。從UISegmentedControl更改視圖

我有一個包含帶3個按鈕的UISegmentedControl的nib文件。切換時,每個窗口的主要部分都會顯示不同的視圖。

一切工作正常,但我懷疑我的方法是有缺陷的,並想知道如果有人可以建議我這樣做的意思是做到這一點。

目前在NIB我有3個UIViews被覆蓋在彼此的頂部,然後在.m文件我修改每個UIViews .hidden隱藏和顯示一個我感興趣的

- (IBAction)segmentAction:(id)sender 
{ 
    if([sender selectedSegmentIndex] == 0) 
    { 
     [self.view1 setHidden:NO]; 
     [self.view2 setHidden:YES]; 
     [self.view3 setHidden:YES]; 
    } 
    else if([sender selectedSegmentIndex] == 1) 
    { 
     [self.view1 setHidden:YES]; 
     [self.view2 setHidden:NO]; 
     [self.view3 setHidden:YES]; 
    } 
    else if([sender selectedSegmentIndex] == 2) 
    { 
     [self.view1 setHidden:YES]; 
     [self.view2 setHidden:YES]; 
     [self.view3 setHidden:NO]; 
    } 
} 

一切都「有效」,但是nib文件是一種編輯的痛苦,因爲您無法輕鬆「關閉」其他UIViews,因此我總是在畫布上選擇錯誤的元素。此外,IB在信息對話框中抱怨:「該視圖與其兄弟姐妹之一重疊」。

我應該採取什麼方法,因爲我希望所有的視圖都在InterfaceBuilder中進行佈置。我應該有4個筆尖文件嗎?如果是這樣的話,我應該如何在segmentControl被按下時加載它們?你可以指示我的任何示例代碼?

感謝

回答

2

了我的頭頂部,這裏有一對夫婦的事情,你可以嘗試:

1)在IB做3個獨立的UIView對象,但不要將其添加到視圖層次結構

假設您有一個包含所有三個視圖的視圖控制器,您可以在IB中通過將每個視圖從庫拖動到標題爲YourNib.nib或YourXib.xib的窗口來創建3個視圖。所以不要將視圖拖到視圖控制器的主視圖中。

現在你可以雙擊每一個和編輯它們自己,而不必嘗試選擇不同的看法,因爲他們是重疊的(因爲他們不是)

在連接選項卡

,連接將控制器的視圖屬性視爲其中一個視圖。

這設置了默認值。

現在

在你的代碼,你可以更改視圖連接到:

[myViewController的setView:視圖2]。

並重新加載視圖。

2)使一個真正高視圖(或真寬視圖),當你點擊一個已分割視圖按鈕,以使其顯示於用戶改變視圖瓦特/相對於父視圖的幀的y位置,好像它們'將分開頁面

這使得動畫和「視圖」之間的轉換變得很容易。儘管會使用更多的內存,因爲即使它們不可見,也會加載所有元素。但無論如何你都這麼做。

+0

你能澄清你的意思嗎?使3個獨立的UIView對象,但不要將它們添加到視圖層次結構。你的意思是'通過將每個視圖從庫拖動到標題爲YourNib.nib或YourXib.xib的窗口來創建3個視圖。 – 2014-11-18 15:33:20

1

這將作爲你擁有它,但你說得對,它的效果並不理想。沒有任何上下文,最自然的方式來實現這將是一個UITabBarController管理三個UIViewControllers,每個都有自己的視圖。當您切換視圖(viewWill/DidAppear,viewWill/DidDisappear等)時,您將獲得所有回調的優勢+它將更易於分離您的nib文件。這些回調對於在適當的時候加載/重新加載數據非常有用。