使用 UISegmentedControl 在视图之间切换

Switching Between Views with a UISegmentedControl

从标题可以看出,我正在尝试找到一种使用分段控件在视图之间切换的方法。实际上,我已经得到了一些东西并且它正在工作。您可以在下面找到它:

- (IBAction)segmentChanged:(id)sender{
    UISegmentedControl *segmentedControl = sender;
    switch (segmentedControl.selectedSegmentIndex) {
        case 0:
            self.currencyContainer.hidden = NO;
            self.goldContainer.hidden = YES;
            self.alarmContainer.hidden = YES;
            break;
        case 1:
            self.currencyContainer.hidden = YES;
            self.goldContainer.hidden = NO;
            self.alarmContainer.hidden = YES;
            break;
        case 2:
            self.currencyContainer.hidden = YES;
            self.goldContainer.hidden = YES;
            self.alarmContainer.hidden = NO;
            break;
        default:
            break;
    }
}

所以,这取决于原理变得隐藏和可见。我认为它很常用,因为一般人都有这样的解决方案,正如我从互联网上搜索的那样。但是,我希望它略有不同。使用我的代码,所有的视图都是一次加载的,但我想在只有视图出现在屏幕上时加载。如果我从 0 切换到 1 索引段,那么我想加载第一个视图并显示在屏幕上。

我该如何管理它?

谢谢。

我在这里回答过类似(不一样,但结果相似)的问题:

基本上你可以使用 NSNotifications 切换视图。您的第一个视图将加载并使用 NSNotifications,您可以向自定义 class 发送通知,该自定义 class 通过更改视图进行监听和响应;当您 select UISegmentControl 上的索引时,您的视图将会改变。

它在你的代码中看起来像这样,在你的 NSObject Class ButtonHandler:

- (IBAction)segmentChanged:(id)sender{
    UISegmentedControl *segmentedControl = sender;
    switch (segmentedControl.selectedSegmentIndex) {
        case 0:
            [[NSNotificationCenter defaultCenter] postNotificationName:@"notifyButtonPressed1" object:self];
        break;
        case 1:
            [[NSNotificationCenter defaultCenter] postNotificationName:@"notifyButtonPressed2" object:self];
        break;
        case 2:
            [[NSNotificationCenter defaultCenter] postNotificationName:@"notifyButtonPressed3" object:self];
        break;
        default:
        break;
    }
}

然后只需按照我在另一个 post.

中列出的其余代码进行操作

效果是这样的:

更新

我已经在 link 上创建了一个关于如何执行此操作的教程:iOS Custom Navigation with UISegmentedControl

要将视图设置为与设备绑定相同,请使用以下方法:

//this will get the size of your device view 
//and set it to width and height aka w & h
int w = self.view.frame.size.width;
int h = self.view.frame.size.height;

//THIS SETS THE SIZE AND POSITION OF THE NEW CONTENT
self.content.view.frame = CGRectMake(0, 0, w, h);

您可以使用 Lazy Stored Properties 类似这样的方法来实现此目的:

lazy var currencyContainer:UIView = {
     var newCurrencyContainer = UIView()
     // your initialization code
     return newCurrencyContainer
}()

惰性存储 属性 是 属性 其初始值直到第一次使用才计算。 - Apple Docs

通过像这样使用可选变量:

var goldContainer:UIView?

稍后检查

if let goldContainer = goldContainer {
     // view is already created
} else {
     // your custom init
     // goldContainer = UIView()
}

希望对您有所帮助。