如何在点击UIButton时将对象作为参数发送?

时间:2011-03-22 20:12:14

标签: iphone cocoa-touch ios4 uibutton

我的UIViewController中有以下代码 -

[flipButton addTarget:self.navigationController.delegate action:@selector(changeModeAction:) forControlEvents:UIControlEventTouchUpInside];

如您所见,它在其导航控制器委托中调用了一个方法。如何正确地将对象传递给此方法?

4 个答案:

答案 0 :(得分:8)

您可以使用图层属性。添加要传递的对象作为图层字典中的值。

[[btn layer] setValue:yourObj forKey:@"yourKey"];

可以通过按钮操作功能访问此yourObj

-(void)btnClicked:(id)sender
{
    yourObj = [[sender layer] valueForKey:@"yourKey"];
}

使用此方法,只需在字典中使用不同的键添加新对象,就可以将多个值传递给按钮功能。

答案 1 :(得分:2)

或者您可以使用objc_setAssociatedObject和objc_getAssociatedObject

答案 2 :(得分:1)

调用changeModeAction:flipButton应将自己作为发件人传递。如果您需要传递其他参数,可以create a category为flipButton类型存储其他信息,或者您可以设置navigationController可以访问的字典,例如。

if(sender == flipButton)
 id obj = [someDictionary objectForKey:@"flipButtonKey"];

答案 3 :(得分:0)

扩展+ Swift 3.0

extension NSObject {

fileprivate struct ObjectTagKeys {
    static var ObjectTag = "ObjectTag"
}

func setObjectTag(_ tag:Any!) {
    objc_setAssociatedObject(self, &ObjectTagKeys.ObjectTag, tag, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}

func getObjectTag() -> Any
{
    return objc_getAssociatedObject(self, &ObjectTagKeys.ObjectTag)
}

}