這裏是我的iPhone應用程序的設置:分段控制來交換ViewControllers在導航控制器
我有了4個視圖控制器(1個UINavigationController的& 3 UIViewControllers)一個的UITabBarController。
Onload我的應用程序默認爲UINavigationController,其中有一個分組的UITableView,它提供了兩個導航選項,當用戶點擊第一個選項時,相關UITableViewController(包含位置列表)被壓入堆棧。
我想在屏幕上發生的事情是讓UISegmentedControl有兩個選項,一個是「列表視圖」(用戶在UIViewController被推入時默認會看到)和一個「地圖視圖」,這將允許相關地點將在地圖上呈現。
我用follwing代碼創建的導航欄的UISegmentedControl:
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:segmentItems];
[segmentedControl setSelectedSegmentIndex:0];
[segmentedControl setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
[segmentedControl setSegmentedControlStyle:UISegmentedControlStyleBar];
[segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
[[self navigationItem] setTitleView:segmentedControl];
[segmentedControl release];
這是改變的時候了UISegmented控制將調用方法:
- (void) segmentAction:(id)sender
{
UISegmentedControl *segmentControl = sender;
if([segmentControl selectedSegmentIndex] == 0)
{
NSLog(@"LIST VIEW CHOSEN!");
}
else
{
NSLog(@"MAP VIEW CHOSEN!");
}
}
所以基本上我的問題是什麼是正確/最好的方式來實現我想要實現的,我不想將控制器推到導航堆棧上,我只是想切換到位(可能與動畫)。所有接口都是在IB中構建的。
一種方法,我試圖做到這一點,但工作,但不覺得它是正確的是通過在我的筆尖文件(一個用於列表視圖和一個用於地圖視圖)中創建兩個單獨的UIViews和然後使用setView:適當的..但我認爲不應該每個這些視圖都有自己的控制器和/或自己的筆尖?
- (void) segmentAction:(id)sender
{
UISegmentedControl *segmentControl = sender;
if([segmentControl selectedSegmentIndex] == 0)
{
NSLog(@"LIST VIEW CHOSEN!");
[self setView:listView]; //Declared as an UIView IBOutlet
}
else
{
NSLog(@"MAP VIEW CHOSEN!");
[self setView:mapView]; //Declared as an UIView IBOutlet
}
}
一些半相關的例子,我所遇到使用「removeFromSuperview」和「addSubview」,這已經有所confued我,我是比較新的可可觸摸的發展,因此,任何讓我的頭圍繞這幫助將是讚賞。
感謝
傑西, 感謝您的快速回復,模態提交不是一個真正的選擇。也許一個視圖控制器是要走的路..這是我用setView做的:在兩個IBOutlets - 只是沒有感覺正確,儘管這兩個視圖應該有自己的控制器...我不認爲彈出/推方法看起來是正確的分段控制,我只是想切換像Youtube應用程序爲「最受歡迎(今日/周/所有)」的意見......所以我想我是在正確的軌道上。謝謝你的評論。 – user416183 2010-08-10 15:21:40