如何使用段控制ios在两个UIViews之间正确切换?

时间:2014-09-04 10:19:05

标签: ios objective-c uitableview uiview uisegmentedcontrol

我正在尝试使用UIViews在两个segmentControl之间切换。现在这两个UIViews都嵌入了scrollViewUIViews被认为是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}}

2 个答案:

答案 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关于内容/子视图控制器的文档:

https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html

答案 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]


}

}

确保以正确的顺序将它们带到前面。