Objective C / iPhone - 如何将 UISlider 绑定到代码

Posted

技术标签:

【中文标题】Objective C / iPhone - 如何将 UISlider 绑定到代码【英文标题】:Objective C / iPhone - how to bind UISlider to code 【发布时间】:2011-12-12 20:46:28 【问题描述】:

我刚开始使用 Objective C,但我已经遇到了一个问题: 当我过去这样做时,我对此没有任何问题: 我制作了一个新的 UISlider,单击它,CTRL 将一条蓝线拖到代码中,然后不知何故我能够读取它的值。

但是,我现在遇到了无法再绘制这些线条的问题。 通过乱搞,我设法让按钮工作,但滑块不起作用。 我的 Mainwindow.xib 有 iSaturateViewController 类, iSaturateViewController.xib 里面有整个界面。

如果无法画出那条线,如何让 UISlider 工作?

我现在如何拥有它: (在 iSaturateViewController.h 中)

#import <UIKit/UIKit.h>

@interface iSaturateViewController : UIViewController 
    UISlider * satSlider;
    UILabel * satLabel;


@property (nonatomic, retain) IBOutlet UISlider * satSlider;
@property (nonatomic, retain) UILabel * satLabel;

-(IBAction) changeSaturation:(id) sender;

@end

(在 iSaturateViewController.m 中):

@synthesize satLabel,satSlider;

-(IBAction) changeSaturation:(id)sender 
    satLabel.text = [[NSString alloc] initWithFormat:@"Saturation:  %d ", (Float32)satSlider.value];
     NSLog(@"%f", satSlider.value);

NSLog 显示的那一刻:0.00000000

另外,我已将 Identity 属性中的 Label 设置为:satSlider(滑块)和 satLabel(标签)。

只是为了澄清我的目标:

我希望通过函数 changeSaturation 将滑块 (satSlider) 的值显示在 UILabel (satLabel) 中。

我该怎么做?

【问题讨论】:

为什么提到C#?你是说 Objective-C 吗? 当您说“C#”时,您的实际意思是什么?目标-C?可可?你显然不是指C#。 哎呀,对不起。我确实是指Objective C。我认为这是编写Objective C 的捷径……还有另一种编写Objective C 的捷径吗? 【参考方案1】:

添加方法声明:

-(IBAction) changeSaturation:(id)sender;

到头文件iSaturateViewController.h

然后,将 UISlider 的 Value Changed 操作分配给 changeSaturation 方法。右键单击滑块并将 Value Changed 拖动到 File's Owner 并连接它们。它应该可以工作。

你也可以试试这个:

-(IBAction)changeSaturation:(id)sender 

     UISlider *slider = (UISlider *)sender;
     satLabel.text = [NSString stringWithFormat:@"Saturation: %f", slider.value];
     NSLog(@"Saturation: %f", slider.value);

关于 UILabel - 添加 IBOutlet 并在 Interface Builder 中连接它。界面应该是这样的:

#import <UIKit/UIKit.h>

@interface iSaturateViewController : UIViewController 
    IBOutlet UISlider * satSlider;
    IBOutlet UILabel * satLabel;


@property (nonatomic, retain) IBOutlet UISlider * satSlider;
@property (nonatomic, retain) IBOutlet UILabel * satLabel;

-(IBAction) changeSaturation:(id) sender;

@end

让我知道它是否有效。

【讨论】:

好的,谢谢,我现在可以正常工作了,但是 NSLog 中返回的值仍然是 0.0000000,并且 UILabel 中的文本不会改变... 代码执行得很好,但是值返回0.0000000并且标签不会改变:S 啊,非常感谢!滑块终于输出了正确的数据......但是...... UILabel 仍然不会改变......我是否也必须将它连接到某些东西? 是的,您还需要连接标签。我更新了答案。您需要添加 IBOutlet 关键字并将标签与 Interface Builder 中的插座连接。 是的...这就是问题所在:我无法在 Interface Builder 中连接它...当我查看 XIB 文件并切换到按钮上的西装模式时[不管那叫什么],并且选择设置为自动,右侧区域为空...当我切换到手动并打开 ViewController.h 文件时,我仍然无法画线...【参考方案2】:

看起来你缺少的关键是satSlider 插座没有连接,所以它的值是nil。您将滑块的操作连接到 -changeSaturation: 方法,但听起来您还没有将 satSlider 属性连接到滑块本身。向nil 发送消息(如本例中的value)不会执行任何操作,并返回0,因此0 是您从中得到的值。通过 Ctrl 键从代码中的属性拖动到 UI 中的滑块来连接您的插座,它应该可以工作。

【讨论】:

问题是:我不能。当我查看 XIB 文件并切换到按钮 [不管那叫什么] 上的西装模式,并将选择设置为自动时,右侧区域是空的......当我切换到手动并打开 ViewController.h文件,我还是画不出来……【参考方案3】:

您需要编辑标题并添加方法声明。然后在 IB 中,将值更改为 UISlider 的第一响应者关联。还有slider.value,需要看文章:Setting interval value for UISlider

【讨论】:

更新了开始帖子以显示 IBAction。不过,您所说的关联第一响应者是什么意思? 编辑:哈哈,我看了已发送的事件,现在我知道你的意思了。和@Rafał Sroka 说的一样

以上是关于Objective C / iPhone - 如何将 UISlider 绑定到代码的主要内容,如果未能解决你的问题,请参考以下文章

如何使用objective C在iphone模拟器中显示图像

Objective C / iPhone - 如何将 UISlider 绑定到代码

如何在 iPhone 的 Objective C 中执行 ZoneTag 的功能?

如何在iphone上使用objective c下载大文件

Objective C / iPhone:如何提取当前区域的实际 unicode 日期格式字符串?

iphone,objective c,如何从音频文件中读取原始数据(未应用编解码器)