嗨,我在視圖上使用分段控件。在這個分段控制的幫助下,我想在我的視圖上顯示不同的表格,假設我的表格中有兩個分段,分段1的分接點我想顯示錶格1並且在分段2的分接點上我想顯示錶2我的表1是普通表格,表格2是分組表格,Apple正在使用方法在應用商店中顯示不同類別的不同應用程序,但我不知道該怎麼做。請建議任何方法或任何代碼樣本也將appriciated。需要使用分段控制來顯示錶的方法?
由於 桑迪
嗨,我在視圖上使用分段控件。在這個分段控制的幫助下,我想在我的視圖上顯示不同的表格,假設我的表格中有兩個分段,分段1的分接點我想顯示錶格1並且在分段2的分接點上我想顯示錶2我的表1是普通表格,表格2是分組表格,Apple正在使用方法在應用商店中顯示不同類別的不同應用程序,但我不知道該怎麼做。請建議任何方法或任何代碼樣本也將appriciated。需要使用分段控制來顯示錶的方法?
由於 桑迪
我們通過將單個的tableview,然後在每一個的tableview回調方法做一個if/case語句返回設在分段控制選擇哪個值上正確的數據執行此操作。
首先,添加segmentedControl到titleview的,並設置當它改變了一個回調函數:
- (void) addSegmentedControl {
NSArray * segmentItems = [NSArray arrayWithObjects: @"One", @"Two", nil];
segmentedControl = [[[UISegmentedControl alloc] initWithItems: segmentItems] retain];
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
segmentedControl.selectedSegmentIndex = 0;
[segmentedControl addTarget: self action: @selector(onSegmentedControlChanged:) forControlEvents: UIControlEventValueChanged];
self.navigationItem.titleView = segmentedControl;
}
接下來,當分段控制被改變,你需要加載數據的新段和重置表視圖來顯示這樣的數據:
- (void) onSegmentedControlChanged:(UISegmentedControl *) sender {
// lazy load data for a segment choice (write this based on your data)
[self loadSegmentData:segmentedControl.selectedSegmentIndex];
// reload data based on the new index
[self.tableView reloadData];
// reset the scrolling to the top of the table view
if ([self tableView:self.tableView numberOfRowsInSection:0] > 0) {
NSIndexPath *topIndexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView scrollToRowAtIndexPath:topIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
}
}
在您的tableView回調
然後,你需要有每個段值邏輯返回正確的事情。我會告訴你一個回調作爲一個例子,但實施其餘的像這樣:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"GenericCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[NSBundle mainBundle] loadNibNamed:@"GenericCell" owner:self options:nil] objectAtIndex: 0];
}
if (segmentedControl.selectedSegmentIndex == 0) {
cell.textLabel.text = @"One";
} else if (segmentedControl.selectedSegmentIndex == 1) {
cell.textLabel.text = @"Two";
}
return cell;
}
就是這樣,希望它有幫助。
另一種替代方法是擁有一個容器視圖,您可以添加哪個tableView
作爲子視圖。您甚至可以讓每個表位於不同的視圖控制器中,通過創建表視圖控制器,然後將.view作爲容器的子視圖添加到其他視圖控制器中,但如果這樣做,則必須手動調用viewWillAppear
,然後viewWillDisapear
(這不是很難,因爲當觸摸分段控件時,換出表格時只需調用它們)。
這是一個救生員。非常感謝你的想法。 – jakeboxer 2010-10-01 15:52:20
另外不要忘記將viewWillAppear和viewWillDisappear從主視圖控制器轉發到當前選定的控制器。 – 2010-10-02 06:22:12
好吧..你已經到了這一點......但你失去了我。我如何轉發viewWillAppear和viewWillDisappear?當我想要向後退出時,是否在子視圖的viewWillDisappear方法中聲明removeFromSuperView?代碼將不勝感激,如果不方便。 – 2011-01-24 04:29:20