如何以编程方式设置 UISlider 初始值,或者,iOS 程序如何启动?
Posted
技术标签:
【中文标题】如何以编程方式设置 UISlider 初始值,或者,iOS 程序如何启动?【英文标题】:How to programmatically set UISlider initial value, or, how does an iOS program start up? 【发布时间】:2012-11-21 05:22:17 【问题描述】:我已经在 xCode 中开发了整整 3 天。我最后一次进行 UI 开发是在 Windows 3.1 中使用 Petzold 书。无论如何,我已经启动并运行了我的第一个 ios 应用程序,它基本上可以满足我的需要。我有两个滑块来选择色调和饱和度,作为对它们的响应,我动态地绘制了一堆渐变阴影圆圈。我在 Hello World 示例和 *** 之间运行了这么多,包括在 CGLayer 中缓存渐变(感谢所有 *** 人员)。不过有一点我不太明白:
我想将一个滑块的初始值设置为 1.0 而不是默认的 0.5。我知道我可以在 IB 中做到这一点,但我更喜欢编写代码,我想我想完全远离 IB。我真的不明白它是如何在事物之间建立联系的,我想了解代码。我有这样的代码来尝试设置它:
- (void)viewDidLoad
NSLog(@"viewDidLoad");
[super viewDidLoad];
[hue_slider setValue:0.5];
[sat_slider setValue:1.0];
self.led_view.hue_slider_value=0.5;
self.led_view.sat_slider_value=1.0;
// Do any additional setup after loading the view, typically from a nib.
sat_slider 仍然在中间而不是在末尾(1.0 是最大值)。从 stackexchange 阅读中,我了解到我可能在错误的时间调用它,当调用 viewDidLoad 时滑块并没有真正加载,并且我的初始值被 IB 中指定的值覆盖。我还没有看到应该在哪里打电话。那么问题来了:
我应该把我的程序放在哪里
[sat_slider setValue:1.0];
让它设置滑块的初始值,覆盖 IB 中的默认值?有人可以解释一下iOS程序中事物的启动顺序吗?并且指向有关 iOS 和 Objective C 编程的在线或印刷书籍的指针会很棒。
编辑
当我检查 sat_slider 的值时,它是 nil。所以这意味着缺少连接?我将它拖到情节提要中并创建了一个 IBOutlet 和一个动作。
@interface led_testViewController : UIViewController
- (IBAction)saturation_scroll:(id)sender;
- (IBAction)hue_scroll:(id)sender;
@property (retain, nonatomic) IBOutlet UISlider *hue_slider;
@property (retain, nonatomic) IBOutlet UISlider *sat_slider;
@property (strong, nonatomic) IBOutlet led_view *led_view;
@end
【问题讨论】:
你能在设置值时检查'sat_slider'是否不为零吗?是否通过 IB 正确连接? 把这个扔到你的viewDidLoad
方法里:NSLog(@"sat_slider is:%@",self.sat_slider);
有点离题,但从 nib 加载视图和其他对象很有趣,了解它是如何工作的,您将了解它如何设置连接 - 尽管有些说法相反,但这并不神奇:)
@ABC:你是对的,当我检查 sat_slider 的值时,它是 nil。所以这意味着缺少连接?我将它拖到情节提要中并创建了一个 IBOutlet 以及一个动作:` @interface led_testViewController : UIViewController - (IBAction)saturation_scroll:(id)sender; - (IBAction)hue_scroll:(id)sender; @property (retain, nonatomic) IBOutlet UISlider *hue_slider; @property (retain, nonatomic) IBOutlet UISlider *sat_slider; @property(强,非原子)IBOutlet led_view *led_view; `
ABC 和 NJones:你是对的,当我检查 sat_slider 的值时,它是 nil。我有两个滑块的 IBOutlet 属性,但肯定缺少一些东西。我从 .h 文件中删除了这两个属性并将它们重新拖动到情节提要中,现在我可以在 viewDidLoad 中很好地设置这些值。这就是我想要离开 IB 的原因。很多东西要学...感谢大家的帮助。
【参考方案1】:
你可以把代码放在- (void)viewWillAppear:(BOOL)animated;
【讨论】:
这是一种不好的做法,因为viewWillAppear:
会在任何时候被调用,例如用户切换到另一个选项卡并返回。如果在viewDidLoad
中设置滑块值不起作用,则应该修复一个更根本的问题(就像在这种情况下一样)。【参考方案2】:
我按照 ABC 和 NJones 的建议检查了 sat_slider,结果为零。 ViewController.h 文件中有 sat_slider 和 hue_slider 的属性,但仍然缺少某些内容。我删除了属性,在 IB 中重新拖动它们,然后我可以毫无问题地在 viewDidLoad 中设置滑块位置。
【讨论】:
【参考方案3】:检查sat_slider
是否为零。还要确保它在 IB 中正确连接。如果没有,请将其删除并在 nib/storyboard 中再次添加。这应该可以解决问题。
【讨论】:
以上是关于如何以编程方式设置 UISlider 初始值,或者,iOS 程序如何启动?的主要内容,如果未能解决你的问题,请参考以下文章