2017-07-05 47 views
-1

如何使用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) 

    } 

} 
+0

我想你不能在這裏使用額外的參數! – Mannopson

+0

@Mannopson, 如果動作需要附加參數該怎麼辦? –

+0

更新您的問題,更具體地瞭解您需要哪些額外數據以及它來自何處。 – rmaddy

回答

2

不能修改的動作方法的簽名。給定的API執行一組特定的允許參數。在這種情況下,唯一允許的參數是按鈕。

正確的解決方案是重構您的ContactHelper類以使用實例方法和實例屬性來存儲狀態,而不是將所有內容都設置爲靜態。

另一個(可能更好的)解決方案是擴展CNContactViewController以添加附加功能而不是創建此輔助類。

相關問題