我有UITableViewController
有5个不同的部分,&每个部分包含一个单独的单元格在第1部分中,我有UISegmentedControl
提供了两个选项,默认情况下,第1段被选中,因此其余部分(其他4个)与第1段相对应。但是,我遇到的问题是:有能力切换到另一个UITableView
,其他部分&当然,当UISegmentedControl
我正在为这个项目使用故事板。
我知道如何实现这一目标的问题已被问过一千次了,如果我使用常规视图控制器,我知道如何做到这一点,我不熟悉使用UITableViewController
这是真的让我很难过。
我尝试过的事情:
No.1:我尝试将UITableViewController
全部删除,并替换为普通ViewController
并将UITableView
替换为主视图。问题在于我被xcode给出了错误,因为静态单元格需要UITableViewController
才能工作,(不幸的是我正在使用静态单元格)。
No.2:我试图用UISegmentedControl
中的条件隐藏单元格,只显示具有相应选择的相应单元格,但这不起作用,因为我是无法添加我的其他部分&顶部的单元格(正如我通常用常规UIViewController
完成的那样。
这是我用来尝试方法#2的代码:
- (IBAction)segmentedControl:(id)sender {
UISegmentedControl *segmentedControl = (UISegmentedControl *) sender;
NSInteger selectedSegment = segmentedControl.selectedSegmentIndex;
if (selectedSegment == 0)
{
upick= 0;
self.lengthCell.hidden=NO;
self.widthCell.hidden=NO;
self.depthCell.hidden=NO;
self.flowCell.hidden=YES;
}
else if (selectedSegment == 1)
{
upick =1;
self.lengthCell.hidden=YES;
self.widthCell.hidden=YES;
self.depthCell.hidden=YES;
self.flowCell.hidden=NO;
}
}
No.3:网上无数个小时的研究,但似乎无法找到我想要的确切结果,大多数人都会用UIViewController
来展示如何做到这一点对于这种特殊情况,步骤是不同的。
我真的很感激一些建议&从这里开始的整体方向因为我被困住了。多谢你们!
答案 0 :(得分:3)
在表格视图控制器中提供所需的所有单元格。
在表格视图的数据源方法(即numberOfSections
,numberOfRowsInSection
,cellForRowAtIndexPath
)中,您可以为这两种状态设置所有正确的数字和数据。
当分段控件发生变化时,您可以做两件事。要么你只是reloadData
,就像之前建议的那样,但是你没有得到任何动画。或者您使用insertRowsAtIndexPaths:withRowAnimation:
和deleteRowsAtIndexPaths:withRowAnimation:
来获得动画效果。
E.g。显示案例1中的1-2节和案例2中的3-6节(第0节是顶部);每个部分有2行
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return _control.selectedSegmentIndex == 0 ? 3 : 4;
}
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section {
return section == 0 ? 1 : 2;
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// .. the usual boilerplate
if (_control.selectedSegmentIndex == 0) { /* configure cell */ }
else { /*do the same for the other case */ }
return cell;
}
-(void)segmentedControlDidChange:(UISegmentedControl*)sender {
NSIndexSet *indexes;
[_tableView beginUpdates];
if (sender.selectedSegmentIndex == 0) {
indexes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1,4)];
[_tableView deleteSections:indexes
withRowAnimation: UITableViewRowAnimationFade];
indexes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1,2)];
[_tableView insertSections:indexes
withRowAnimation: UITableViewRowAnimationFade];
[_tableView reloadSections:indexes
withRowAnimation: UITableViewRowAnimationNone];
}
else {
// do the reverse
}
[_tableView endUpdates];
}
答案 1 :(得分:0)
如果我是正确的,您需要使用UISegmentedControl在2个表视图之间切换。您可以使用UIViewController并向其添加2个UITableViews,并将UISegmentedControl保留在表视图之外。然后可以通过以下方法管理它:
- (IBAction)segmentedControl:(id)sender {
UISegmentedControl *segmentedControl = (UISegmentedControl *) sender;
NSInteger selectedSegment = segmentedControl.selectedSegmentIndex;
if (selectedSegment == 0)
{
//show Table1 and hide Table2
// Reload Table1
}
else if (selectedSegment == 1)
{
//show Table2 and hide Table1
// Reload Table2
}
}
希望这有帮助。