2010-04-10 72 views
0

我有(两者都引用网点)两大UISliders的价值Changed事件连线了以下方法:如何确定哪个控件触发了一个事件?

-(IBAction) sliderMoved:(id) sender {} 

如何确定哪些滑很感动,这样我可以得到它的价值和更新相应的标签?或者有两个单独的事件会更简单,每个滑块一个事件?第二个选项似乎对我来说是不必要的复制。

干杯, 丹

+1

你应该阅读Cocoa Bindings。只需将标签和滑块绑定到相同的值即可。 – NSResponder 2010-04-12 02:18:15

+0

这听起来很有用;谢谢。顺便说一句,好名字! – 2010-04-12 15:12:37

回答

1

如果您设置了滑块,您可以使用[发件人标签]获取滑块的标签。在创建滑块时或在界面构建器中分配标签。

-(IBAction) sliderMoved:(UISlider*)sender { 
switch ([sender tag]) { 
case kMyOneSlider: ... break; 
case kMyOtherSlider: ... break; 
} 
} 

您可以使用==与出口成员每个滑块:

-(IBAction) sliderMoved:(UISlider*)sender { 
if (sender == mOneSlider) ...; 
if (sender == mOtherSlider) ...; 
} 

或者,你可以设置每个滑块不同的动作。如果处理程序中有一些通用代码,我通常会共享一个操作方法。

+0

这是官方的“答案”,因为它更直接简洁地回答了我的问题。 – 2010-04-11 03:50:29

4

这将是sender变量。只需做所有的工作就可以了。

顺便说一下,强行输入它是合法的。所以如果你知道你只打算处理UISlider对象,你可以做-(IBAction)someAction:(UISlider*)slider {}

+0

这很好,我猜ID是相当于一个C#对象类型?但问题仍然存在 - 是否有一种令人愉快的方式可以确定触发事件的两个滑块中的哪一个? – 2010-04-10 03:02:11

+2

您可以使用==运算符来比较'sender'对象和已知滑块的指针。对于'id'类型,它就像C#的''object'类型,只是编译器会假定对_all_方法的调用将会成功(因此对于任何调用都不会发出警告)。 – zneak 2010-04-10 03:14:29

+0

非常感谢您的帮助。 – 2010-04-10 03:23:48

相关问题