我正在尝试使用UIViews
在两个segmentControl
之间切换。现在这两个UIViews
都嵌入了scrollView
。UIViews
被认为是segmentControl
显示为一个,所以我把它们放在彼此的顶部(在XIB中)。当点击didSelectRow
时,我试图隐藏/显示它们。但到目前为止,我无法在两者之间切换。也尝试了下面建议的解决方案。但是它只适用于随机单元格而无法切换所有单元格。缺少什么?
这就是我在tableViewCell
中设置隐藏在 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if ([self.expandedCells containsObject:indexPath]) {
expCell.upperContainer.hidden = NO;
expCell.upperScroll.hidden = NO;
[self.expandedCells removeObject:indexPath];
}else{
isExpanded=YES;
[self.expandedCells addObject:indexPath];
//hide upper container
if (!expCell.upperContainer.hidden) {
expCell.upperContainer.hidden = YES;
}
if (!expCell.upperScroll.hidden) {
expCell.upperScroll.hidden =YES;
}
}
[self.bTableView beginUpdates];
[self.bTableView reloadData];
[self.bTableView endUpdates];
}
中隐藏的上部视图的方法。
-(void)selectDeckView:(UISegmentedControl*)sender{
if (sender.selectedSegmentIndex==0) {
NSLog(@"segment 0"); //executes
expCell.lowerDeckView.hidden=NO;
expCell.lowerScrollView.hidden=NO;
expCell.upperScroll.hidden=YES;
expCell.upperContainer.hidden=YES;
}else if (sender.selectedSegmentIndex==1){
NSLog(@"segment 1"); //executes
expCell.lowerDeckView.hidden=YES;
expCell.lowerScrollView.hidden=YES;
expCell.upperContainer.hidden=NO;
expCell.upperScroll.hidden=NO;
}
}
在segmentControl上的expandedCell中,单击我正在执行以下操作。
{{1}}
答案 0 :(得分:1)
我建议将每个视图放在自己的视图控制器中,然后在按下某个段时添加相应的子视图控制器。
包含分段控件的视图控制器将是容器视图控制器,并且它将有一个这样的方法,它添加了两个内容视图控制器之一(每个控制器包含您提到的一个视图),这些控制器被调用当按下一个段时:
- (void) displayContentController: (UIViewController*) content;
{
[self addChildViewController:content]; // 1
content.view.frame = [self frameForContentController]; // 2
[self.view addSubview:self.currentClientView];
[content didMoveToParentViewController:self]; // 3
}
您可以缓存您的子视图控制器实例,以便只创建一次,如果这是合适的,这意味着它会很快。 Apple关于内容/子视图控制器的文档:
答案 1 :(得分:0)
你可能有一个涵盖另一个的视图,你试过了吗?
if (sender.selectedSegmentIndex==0) {
NSLog(@"segment 0"); //executes
expCell.lowerDeckView.hidden=NO;
expCell.lowerScrollView.hidden=NO;
expCell.upperScroll.hidden=YES;
expCell.upperContainer.hidden=YES;
[self.view bringSubviewToFront:expCell.upperScroll]
[self.view bringSubviewToFront:expCell.upperContainer]
}else if (sender.selectedSegmentIndex==1){
NSLog(@"segment 1"); //executes
expCell.lowerDeckView.hidden=YES;
expCell.lowerScrollView.hidden=YES;
expCell.upperContainer.hidden=NO;
expCell.upperScroll.hidden=NO;
[self.view bringSubviewToFront:expCell.lowerScrollView]
[self.view bringSubviewToFront:expCell.lowerDeckView]
}
}
确保以正确的顺序将它们带到前面。