如何在UIButton
?
id data = getSomeData();
[button addTarget:self
action:@selector(buyButtonTapped:event:)
forControlEvents:UIControlEventTouchUpInside];
我希望buyButtonTapped
函数看起来像:
(void) buyButtonTapped: (UIButton *) button event: (id) event data: (id) data
答案 0 :(得分:67)
不可能。由UIControl触发的操作可以有3个不同的签名。
- (void)action
- (void)action:(id)sender
- (void)action:(id)sender forEvent:(UIEvent *)event
它们都不允许您发送自定义数据。
根据您的目的,您可以通过不同方式访问数据。
例如,如果按钮位于UITableView中,您可以使用以下内容:
- (IBAction)buttonPressed:(UIButton *)sender {
CGPoint buttonOriginInTableView = [sender convertPoint:CGPointZero toView:tableView];
NSIndexPath *indexPath = [tableView indexPathForRowAtPoint:buttonOriginInTableView];
NSData *customData = [myDataSource customDataForIndexPath:indexPath];
// do something
}
始终有一种方法可以在不将数据传递给按钮的情况下获取数据。
答案 1 :(得分:21)
您无法向操作方法发送额外数据。有许多方法可以将数据与按钮相关联,但除非数据是单个NSInteger,否则没有一种方法特别简单。
tag
属性来保存单个NSInteger。这可能就是您所需要的,或者您可以使用它来查找数组或字典中的对象。[NSValue valueWithNonretainedObject:button]
作为字典的键。答案 2 :(得分:-3)
你真的不能这样做。你可以做的是将数据放在字典中,然后使用按钮来获取它。
E.g。
myDataDict = [NSDictionary dictionaryWithObjectsAndKeys:someData, button, nil];
然后呢;
-(void) buttonPress:(id)sender
{
data = [dataDict objectForKey:sender];
}
如果您在InterfaceBuilder中指定了按钮,则可以使用按钮的“tag”属性来查找数据,但您需要将其转换为NSNumber以与字典一起使用。