添加分段控件
控件是一種小型的、自包含的UI組件,可以用在各種UI Kit類中。它們可以被附着在許多不同類型的對象之上,讓開發者可以在窗口中添加額外的功能。有一個控件在蘋果公司預裝的應用程序的導航欄中經常見到,這就是分段控件。
你會注意到,在許多預置的應用程序中,蘋果公司加入一些按鈕以便對顯示的信息做進一步分類。例如,iTunes WiFi Store應用程序的導航欄上就顯示着"最新發行"、"熱門金曲"、"風格流派"等按鈕。這些按鈕進一步划分了用戶的樂曲選擇方式。分段控件就適用於這種 情況:存在大量相似數據,最好用兩到三個按鈕對數據進行分類。
下面的例子配備了一個控件,令其顯示"全部"與"未接"電話:
- UISegmentedControl *segmentedControl = [ [ UISegmentedControl alloc ]
- initWithItems: nil ];
- segmentedControl.segmentedControlStyle =
UISegmentedControlStyleBar; - [ segmentedControl insertSegmentWithTitle:
@"All" atIndex: 0 animated: NO ]; - [ segmentedControl insertSegmentWithTitle:
@"Missed" atIndex: 1 animated: NO ];
一旦你創建好分段控件之后,就可以將其賦予一個視圖控制器的titleView導航屬性,從而將其顯示出來。這會使得標准的標題文字被替換成你的自定義視圖:
- self.navigationItem.titleView = segmentedControl;
你應該還會希望這個類在用戶選擇新的分段時能立刻得到通知,以便讓它可以隨之改變,顯示新的信息。要做到這一點,可以用UIControl類的addTarget方法來指定一個方法,在控件的值改變時去調用:
- [ segmentedControl addTarget: self
- action: @selector(controlPressed:)
- forControlEvents: UIControlEventValueChanged
- ];
在下面的例子中,一個名為controllerPressed的選擇子被指定為在目標self中應得到通知的方法。請在你的目標類中編寫這個例程,好處理值的變化:
- - (void) controllerPressed:(id)sender {
- int selectedIndex = [ segmentedControl selectedSegmentIndex ];
- /* 添加代碼,處理值的變化 */
- }
分段控件中的每個按鈕,都被稱為一個段。調用控件自身的selectedSegment方法,就可以訪問被選中的段:
- - (void) controllerPressed:(id)sender {
- int selectedSegment = segmentedControl.selectedSegmentIndex;
- NSLog(@"Segment %d selected\n", selectedSegment);
- }
