我有一个ViewController,它填充了几个滑块:
// ViewController.h
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UISlider *aSlider;
@property (weak, nonatomic) IBOutlet UISlider *anotherSlider;
@end
// ViewController.m
@interface ViewController ()
@end
@implementation ViewController
-(void)resetSliders
{
NSLog(@"Resetting sliders sl1: %@ sl2: %@", self.aSlider, self.anotherSlider);
[self.aSlider setValue:0.5f animated:NO];
[self.anotherSlider setValue:0.5f animated:NO];
}
- (IBAction)setOneSlider:(UISlider *)sender {
NSLog(@"Setting aSlider to %f", sender.value);
self.sl1Val = sender.value;
[self doAThing];
}
- (IBAction)setTwoSlider:(UISlider *)sender {
NSLog(@"Setting anotherSlider to %f", sender.value);
self.sl2Val = sender.value;
[self doBThing];
}
@end
对setOneSlider
和setTwoSlider
的调用将连接到两个滑块的值更改事件。这非常有效。遗憾的是,我没有将滑块连接到程序化句柄,因为对resetSliders
的调用在UI中没有任何变化,即使在两个滑块元素上添加了setNeedsDisplay
调用。
调用resetSliders
时,日志显示:
2015-04-28 12:22:19.608 myApp[4489:681127] Resetting sliders sl1: (null) sl2: (null)
有人能告诉我如何使用正确的对象句柄设置self.aSlider
和self.anotherSlider
吗?
添加一些颜色:我已将滑块的UI表示拖动到各自的@property声明中,我可以看到它们在边距中填充了灰色圆圈,表示它们已被连线。 Connections Inspector显示" Value Changed"事件触发器和将myApp连接到滑块的引用插座。
我对IOS编程非常陌生,并且达到了逐渐学习的极限。
答案 0 :(得分:0)
听起来您还需要在Interface Builder中连接这些插座:
@property (retain, nonatomic) IBOutlet UISlider *aSlider;
@property (retain, nonatomic) IBOutlet UISlider *anotherSlider;
此外,您无需为相同的滑块声明属性和ivars。只需声明并使用您已有的属性即可。
@interface ViewController : UIViewController
和
-(void)resetSliders
{
// note the addition of 'self.' below
NSLog(@"Resetting sliders sl1: %@ sl2: %@", self.aSlider, self.anotherSlider);
[self.aSlider setTo:0.5f animated:NO];
[self.anotherSlider setTo:0.5f animated:NO];
}
答案 1 :(得分:0)
应在@interface
块内定义属性。你们现在在外面。此外,它们应该是weak
而不是retain
,不需要@synthesize
语句或ivars。
最后,当您在代码中引用它们时,您应该self.aSlider
,而不仅仅是aSlider
。