如何在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)
}
}
答案 0 :(得分:2)
您无法修改操作方法的签名。给定的API强制执行一组特定的允许参数。在这种情况下,唯一允许的参数是按钮。
正确的解决方案是重构您的ContactHelper类,以使用实例方法和实例属性来存储状态,而不是将所有内容都设置为静态。
另一个(可能更好的)解决方案是扩展CNContactViewController
以添加其他功能,而不是创建此帮助程序类。