从IBAction获取按钮文本 - iPhone

时间:2009-05-20 15:35:08

标签: iphone objective-c cocoa interface-builder

调用IBAction时:

-(IBAction) onClick1: (id) sender;

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

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

7 个答案:

答案 0 :(得分:60)

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

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

    NSString *title = [(UIButton *)sender currentTitle];
}

答案 1 :(得分:25)

实际上是:

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

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

答案 2 :(得分: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]);
}

答案 3 :(得分:10)

只需编写以下代码

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

}

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

答案 4 :(得分:2)

发件人应该被定义为类型id,而不是int或NSString。发件人是调用该方法的实际对象;如果你把它连接到一个按钮,它将是一个UIButton,如果它是一个文本字段,一个UITextField。您可以使用它来从控件获取信息(例如文本字段的当前字符串值),或者如果您有多个控件连接到同一个操作方法,则将其与IBOutlet实例变量进行比较。

答案 5 :(得分:2)

您可以使用以下内容获取按钮标签并确定单击了哪个标签:

NSLog(@"Clicked button: %@",[[sender titleLabel] text]);

要回答你的问题,id是来自IB的对象。

答案 6 :(得分:1)

从按钮获取文字:

 NSLog(@"Date::%@",[btn titleForState:UIControlStateNormal]);