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

Posted

技术标签:

【中文标题】使用分段控制在 ios 中的视图之间切换视图【英文标题】:switching views between views in ios using segmented control 【发布时间】:2015-08-06 18:47:05 【问题描述】:

朋友们,

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

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

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

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

但我只需要一个视图中的这些按钮。当我选择它应该切换到其他视图

【问题讨论】:

你能说出你到目前为止取得了什么成就吗? 我已经尝试过非常简单地分别使用四个不同的视图,但考虑到每个视图中的开关位置不同,这看起来很糟糕 你看过 TabBarController 了吗?还是您想使用分段控制来实现它? 我想用段控制来实现 我也尝试使用分段控制在单个视图中显示不同的颜色,但我无法使用它显示其他视图!!!我也是这个主题和 xcode 的新手 【参考方案1】:

根据四个视图对内容的要求,我建议为分段控件制作一个主视图,并在主视图中设置四个容器视图。他们三个应该被隐藏,然后您可以在四个视图之间切换(显示/隐藏)。

如果视图的代码非常“软”,或者同时运行 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 我没试过,但应该可以。

【讨论】:

我已经尝试使用四个delmerebnt视图控制器,通过在选择时设计所有视图控制器中的按钮应该看起来选中。但这似乎是错误的..因为当我为每个按钮位置运行应用程序视图时..你能否发布一个示例代码,我使用的是 xcode 4.2 现在上面的帖子中有一个例子:) 是的,我解决了它有帮助..!但是我怎样才能将字母的大小更改为分段命名,它会发生冲突或由于标题中的长名称而无法显示某些字母!我搜索了分段控件中没有可用的字体大小 酷。然后请投票给我的答案 :-) - 在这里查看如何更改 segmentedControl 中的字体大小:***.com/questions/2280391/…【参考方案2】:

在主要内容视图中添加分段控件。 然后将其他视图添加为分段控件下的子视图。 (设置子视图的框架以使视图不与分段控件重叠) 然后为每个子视图设置 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];

【讨论】:

能否请您发送一个示例代码。我尝试在每个视图控制器中分别使用四种不同的视图编码来显示视图 您不想为每个屏幕创建不同的视图控制器。使用单个视图控制器并在其上添加所有视图。 将多个视图添加到答案中添加的视图控制器视图的示例代码。如果有帮助,请将其标记为答案

以上是关于使用分段控制在 ios 中的视图之间切换视图的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 分段控制 - 切换多个视图

分段控制和滚动视图,将视图保存在内存中

在 iOS 7 中的两个简单视图控制器之间进行切换的正确方法

分段控制切换视图?

高效地在视图控制器之间切换

视图控制器 IOS 视图间切换