UIBarButtonItem 中的自定义选择器(带有额外参数)
Custom selector (with extra params) in UIBarButtonItem
如何在 UIBarButtonItem 中定义带有额外参数的动作?
我需要将 CNContactViewController 对象传递给 buttonActionMethod:
class ContactHelper {
public static func showContact(controller: UIViewController, contactViewControllerDelegate: CNContactViewControllerDelegate,
contact: CNContact) {
let contactController = CNContactViewController.init(for: contact)
contactController.navigationItem.leftBarButtonItem =
UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.cancel, target: self,
action: #selector(ContactHelper.buttonAction))
contactController.delegate = contactViewControllerDelegate
let navigationController = UINavigationController(rootViewController: contactController)
controller.present(navigationController, animated: false)
}
private static func buttonAction(sender: ContactButton) {
// need to pass contactController from showContact function
contactController.dismiss(animated: true, completion: nil)
}
}
您不能修改操作方法的签名。给定的 API 强制执行一组特定的允许参数。在这种情况下,唯一允许的参数是按钮。
正确的解决方案是重构您的 ContactHelper class 以使用实例方法和实例属性来存储状态,而不是将所有内容设为静态。
另一个(可能更好的)解决方案是扩展 CNContactViewController
以添加附加功能而不是创建此助手 class。
如何在 UIBarButtonItem 中定义带有额外参数的动作?
我需要将 CNContactViewController 对象传递给 buttonActionMethod:
class ContactHelper {
public static func showContact(controller: UIViewController, contactViewControllerDelegate: CNContactViewControllerDelegate,
contact: CNContact) {
let contactController = CNContactViewController.init(for: contact)
contactController.navigationItem.leftBarButtonItem =
UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.cancel, target: self,
action: #selector(ContactHelper.buttonAction))
contactController.delegate = contactViewControllerDelegate
let navigationController = UINavigationController(rootViewController: contactController)
controller.present(navigationController, animated: false)
}
private static func buttonAction(sender: ContactButton) {
// need to pass contactController from showContact function
contactController.dismiss(animated: true, completion: nil)
}
}
您不能修改操作方法的签名。给定的 API 强制执行一组特定的允许参数。在这种情况下,唯一允许的参数是按钮。
正确的解决方案是重构您的 ContactHelper class 以使用实例方法和实例属性来存储状态,而不是将所有内容设为静态。
另一个(可能更好的)解决方案是扩展 CNContactViewController
以添加附加功能而不是创建此助手 class。