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 的功能?