从IBAction获取按钮文本 - iPhone

Org*_*cat 30 iphone cocoa objective-c interface-builder

调用IBAction时:

-(IBAction) onClick1: (id) sender;
Run Code Online (Sandbox Code Playgroud)

发件人传递了什么?由于它通过IB连接起来,我不太确定.我的问题是如何让按钮的文本成为传递的对象(最有可能是NSString),以便我可以在动作实现中调用它.

-(IBAction) onClick1: (id) sender {
  NSLog(@"User clicked %@", sender);
  // Do something here with the variable 'sender'
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*all 60

sender应是启动操作的控制.但是,您不应该假设它的类型,而应该将它定义为id.而是在实际方法中检查对象的类,如下所示:

- (IBAction)onClick1:(id)sender {
    // Make sure it's a UIButton
    if (![sender isKindOfClass:[UIButton class]])
        return;

    NSString *title = [(UIButton *)sender currentTitle];
}
Run Code Online (Sandbox Code Playgroud)

  • 没错,你不需要.我更喜欢投射我的id,以便编译器可以在我尝试向错误类型的对象发送消息时发出警告. (5认同)
  • 声明方法签名中的发件人为UIButton*而不是id. (2认同)

Mar*_*c W 25

它实际上是:

-(IBAction) onClick1: (id) sender {
  NSLog(@"User clicked %@", sender);
  // Do something here with the variable 'sender'
}
Run Code Online (Sandbox Code Playgroud)

sender不是NSString,它是类型id.它只是发送事件的控件.因此,如果在单击按钮时触发您的方法,UIButton则将发送单击的对象.您可以以UIButton编程方式访问所有标准方法和属性.

  • 你实际上甚至不需要施放它.与动态语言中的方法调用相反,这就是消息传递的美妙之处.:-) (2认同)

Gam*_*ing 14

-(IBAction)onClick:(id) sender {
     UIButton *btn = (UIButton *)sender;

    //now btn is the same object. And to get title directly
    NSLog(@"Clicked button: %@",[[btn titleLabel] text]);
}
Run Code Online (Sandbox Code Playgroud)


VSN*_*VSN 10

只需编写以下代码即可

-(IBAction) getButtonTitle:(id)sender
{
     UIButton *button = (UIButton *)sender; 
     NSString *buttonTitle = button.currentTitle;
     NSLog(@"Button Title %@",buttonTitle);

}
Run Code Online (Sandbox Code Playgroud)

多数民众赞成......你做到了!!!