嗨,我在视图上使用分段控件。在这个分段控制的帮助下,我想在我的视图上显示不同的表格,假设我的表格中有两个分段,分段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