UIBarButtonItem中的自定义选择器(带有额外的参数)

时间:2017-07-05 17:52:38

标签: ios swift 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)

    }

}

1 个答案:

答案 0 :(得分:2)

您无法修改操作方法的签名。给定的API强制执行一组特定的允许参数。在这种情况下,唯一允许的参数是按钮。

正确的解决方案是重构您的ContactHelper类,以使用实例方法和实例属性来存储状态,而不是将所有内容都设置为静态。

另一个(可能更好的)解决方案是扩展CNContactViewController以添加其他功能,而不是创建此帮助程序类。