30

当调用 IBAction 时:

-(IBAction) onClick1: (id) sender;

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

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

7 回答 7

60

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

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

    NSString *title = [(UIButton *)sender currentTitle];
}
于 2009-05-20T15:43:24.173 回答
25

其实是:

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

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

于 2009-05-20T15:38:55.650 回答
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]);
}
于 2011-02-07T05:43:27.463 回答
10

只需编写以下代码

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

}

就是这样……你做到了!!!

于 2012-10-18T12:26:14.240 回答
2

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

于 2009-05-20T15:40:05.257 回答
2

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

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

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

于 2010-11-27T19:00:52.203 回答
1

从按钮获取文本:

 NSLog(@"Date::%@",[btn titleForState:UIControlStateNormal]);          
于 2014-04-02T10:21:12.273 回答