需要将使用Interface Builder创建的UISlider连接到非事件代码

时间:2015-04-28 18:12:15

标签: ios objective-c uislider

我有一个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

setOneSlidersetTwoSlider的调用将连接到两个滑块的值更改事件。这非常有效。遗憾的是,我没有将滑块连接到程序化句柄,因为对resetSliders的调用在UI中没有任何变化,即使在两个滑块元素上添加了setNeedsDisplay调用。

调用resetSliders时,日志显示:

2015-04-28 12:22:19.608 myApp[4489:681127] Resetting sliders sl1: (null) sl2: (null)

有人能告诉我如何使用正确的对象句柄设置self.aSliderself.anotherSlider吗?

添加一些颜色:我已将滑块的UI表示拖动到各自的@property声明中,我可以看到它们在边距中填充了灰色圆圈,表示它们已被连线。 Connections Inspector显示" Value Changed"事件触发器和将myApp连接到滑块的引用插座。

我对IOS编程非常陌生,并且达到了逐渐学习的极限。

2 个答案:

答案 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