我的UIViewController中有以下代码 -
[flipButton addTarget:self.navigationController.delegate action:@selector(changeModeAction:) forControlEvents:UIControlEventTouchUpInside];
如您所见,它在其导航控制器委托中调用了一个方法。如何正确地将对象传递给此方法?
答案 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)
}
}