使用UISegmentedControl在视图之间切换

时间:2015-07-06 11:58:56

标签: ios objective-c uisegmentedcontrol

从标题中可以清楚地看到,我正试图找到一种使用分段控制在视图之间切换的方法。实际上,我已经有了一些东西,它正在发挥作用。你可以在下面找到它:

RETURNS TABLE

因此,它取决于隐藏和可见的原则。我认为使用它是如此常见,因为当我从互联网上搜索时,人们通常会以这种方式获得解决方案。但是,我希望它略有不同。使用我的代码,所有视图都会立即加载,但我想在屏幕上显示视图时加载。如果我从0切换到1索引段,那么我想加载第一个视图并在屏幕上显示。

我该如何管理它?

感谢。

2 个答案:

答案 0 :(得分:1)

我在这里回答了一个类似的(不一样但是类似的结果)问题:How To Switch Views With NSNotifications

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

在您的代码中,在您的NSObject类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;
    }
}

然后,只需按照我在其他帖子中列出的其余代码进行操作。

这是效果:

Switch Views with NSNotifications

<强>更新

我已在此链接上创建了有关如何执行此操作的教程: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);

答案 1 :(得分:1)

您可以使用Lazy Stored Properties这样的内容来实现此目的:

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

惰性存储属性是一个属性,其初始值在第一次使用之前不会计算。 - Apple Docs

OR

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

var goldContainer:UIView?

以后检查

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

希望这会对你有所帮助。