使用 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()
}
希望对您有所帮助。
从标题可以看出,我正在尝试找到一种使用分段控件在视图之间切换的方法。实际上,我已经得到了一些东西并且它正在工作。您可以在下面找到它:
- (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()
}
希望对您有所帮助。