2012-02-04 62 views
1

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

-(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,我能怎么会丢失?

+0

Add:NSLog(@“Sender is%@”,sender);在playNoteFromKeyTouch里面:确保你获得不同的密钥。 – Rayfleck 2012-02-04 17:00:29

+0

是的,我有不同的钥匙 – 2012-02-04 17:04:54

+0

Wierd。你可以粘贴你的IB面板的屏幕截图来显示你设置标签的位置吗? – Rayfleck 2012-02-04 17:16:03

回答

1

我认为,你应该采取另一种方法。创建一个Octave类,从UIView中创建你的关键字的子类,并为关键字添加一个八度属性和一个音符属性。

或者,您可以为每个八度音程设置一个数组,并检查发件人在哪个数组中指定索引以确定音符。

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

+0

感谢您的回答。我忘了我正在使用其他东西的标签。 O_O – 2012-02-04 17:33:36

0

我把一个测试项目放在一起,并验证你的代码应该给你适当的标签。也许你忽略了代码之外的东西。请尝试以下操作:

  • 确认您更改正确的.xib(iPhone,而不是iPad等)
  • 验证标签中的.xib
  • 重新启动的Xcode设置正确,验证标签仍然设置