使用分段控件在 ios 中的视图之间切换视图

switching views between views in ios using segmented control

朋友,

我需要在 四到五个不同的视图之间切换 headers

有四个视图示例设置连接打开交易关闭交易

这些是headers我想在我点击的四个页面之间导航

例如我想切换到设置视图当我点击它时类似所有其他视图但是这些按钮必须在所有视图中

但我只需要在 一个视图中使用这些按钮。当我 select 它应该切换到其他视图时

根据四视图内容的要求,我建议分段控件做一个主视图,在主视图中设置四个容器视图。他们三个应该被隐藏,然后你可以在四个视图之间切换(show/hide)。

只有当视图的代码非常 "soft" 时,这才是一个好的解决方案,否则同时 运行 4-5 个视图会非常慢。如果它是四个硬核视图,我更愿意使用标准导航选项卡栏控件来代替..

//////// 示例 ////////

设置将使用一个 UIViewController 作为背景。在这个视图上,我们将放置一个 UISegmentedControl + 四个容器视图。四个容器视图应该放在彼此的顶部。三个容器视图被隐藏,所以您只能看到一个。

BackgroundViewController.h:

#import <UIKit/UIKit.h>

@interface BackgroundViewController : UIViewController {
    IBOutlet UISegmentedControl *segmentedControl;
    UIView actualView;
}

@property (nonatomic, weak) IBOutlet UIView *containerOne;
@property (nonatomic, weak) IBOutlet UIView *containerTwo;
@property (nonatomic, weak) IBOutlet UIView *containerThree;
@property (nonatomic, weak) IBOutlet UIView *containerFour;

@end

下面是分段控件的 IBAction 示例。

- (void) viewDidLoad {
    actualView = self.containerOne;
    UIView *fromView = nil;
    UIView *toView = nil;

    self.containerOne.hidden = NO;
    self.containerTwo.hidden = YES;
    self.containerThree.hidden = YES;
    self.containerFour.hidden = YES;
}

- (IBAction)segmentSwitchClick {
    NSInteger selectedSegment = segmentedControl.selectedSegmentIndex;

    UIView *fromView = actualView;
    UIView *toView = nil;

    switch (selectedSegment) {
        case 0: {
            toView = [self containerOne];
            break;
        } 
        case 1: {
            toView = [self containerTwo];
            break;
        }  
        case 2: {
            toView = [self containerThree];
            break;
        }  
        case 3: {
            toView = [self containerFour];
            break;
        }  
        default:
            break;
        }
    }
    [UIView transitionFromView:fromView toView:toView duration:1.9 options:UIViewAnimationOptionShowHideTransitionViews |  UIViewAnimationOptionCurveLinear
                completion:^(BOOL finished) {
                    if (finished) {
                        actualView = toView;
                    }
                }];

}

PS我没试过,但应该可以。

在主要内容视图中添加分段控件。 然后在分段控件下添加其他视图作为子视图。 (设置子视图的框架,以使视图不与分段控件重叠) 然后为每个子视图设置 IBOutlet。在分段控件的操作方法中,根据分段控件选择的索引显示和隐藏子视图。 当您需要显示一个视图时,隐藏其他子视图。

这是一个简单直接的解决方案

下面是在 viewcontroller 的超级视图上添加 3 个视图的示例代码(未测试)

CGRect frame = CGRectMake(x, y, width, height); // Replacing with your dimensions
UIView *view1 = [[UIView alloc] initWithFrame:frame];
UIView *view2 = [[UIView alloc] initWithFrame:frame];
UIView *view3 = [[UIView alloc] initWithFrame:frame];

Then, you want to actually add it to the superview (assuming the view is self.view)

[self.view addSubview:view1];
[self.view addSubview:view2];
[self.view addSubview:view3];