sender标签始终返回1

时间:2012-02-04 16:52:41

标签: iphone objective-c ios cocoa-touch

我有一个钢琴键盘。每个按钮(钢琴键)在IB中分配了不同的标签。标签用于识别每个按钮,以便我可以播放属于该钢琴键的声音。我将每个钢琴键连接到以下IBAction:

-(IBAction)playNoteFromKeyTouch:(id) sender{
    UIButton *pressedButton = sender;
    int tag = [pressedButton tag];
}

[pressedButton标签]返回的值始终为1.我尝试了不同的方法,例如:

-(IBAction)playNoteFromKeyTouch:(id) sender{
    NSInteger tag = ((UIView*)sender).tag;
}

简单地说:

-(IBAction)playNoteFromKeyTouch:(id) sender{
    int tag = [sender tag];
}

无论我做什么,即使我以编程方式为每个钢琴键指定标签,我总是得到标签== 1.我能错过什么?

2 个答案:

答案 0 :(得分:1)

我想,你应该采用另一种方法。创建一个Octave类,从UIView中为您的键创建子类,为该键添加一个八度音程属性和一个音符属性。

或者你可以为每个八度音阶都有一个数组,并检查发送者在哪个数组中有哪些索引来确定音符。

标签很好,用于标识从nib文件加载的视图。对于任何其他适当的面向对象的对象处理更好!

答案 1 :(得分:0)

我整理了一个测试项目并验证了您的代码应该为您提供适当的标记。也许你忽略了代码之外的东西。请尝试以下方法:

  • 确认您更改了正确的.xib(iPhone而不是iPad等)
  • 验证标记是否已在.xib中正确设置
  • 重新启动Xcode并验证代码是否仍然设置