महान वर्कअराउंड के लिए @GxocT के लिए यश! मेरे उपयोगकर्ताओं की बहुत मदद की।
लेकिन मैं @GxocT समाधान के आधार पर अपने कोड को साझा करना चाहता था उम्मीद है कि यह इस परिदृश्य में दूसरों की मदद करेगा।
मुझे जरूरत थी कि मुझे CNContactViewControllerDelegate
contactViewController(_:didCompleteWith:)
रद्द (साथ ही साथ) रद्द कर दिया जाए।
इसके अलावा मेरा कोड नहीं था UIViewController
इसलिए वहाँ कोई नहीं हैself.navigationController
मैं भी जब मैं इसे मदद कर सकते हैं बल प्रयोग नहीं पसंद है। मुझे अतीत में काट दिया गया है इसलिए मैंने if let
सेटअप में एस को जंजीर किया
यहाँ मैंने क्या किया है:
विस्तृत करें CNContactViewController
और
वहां स्विज़ल फ़ंक्शन रखें ।
स्विज़ल फ़ंक्शन में मेरे मामले में बस संपर्क नियंत्रक से
CNContactViewControllerDelegate
प्रतिनिधि और ऑब्जेक्ट के
contactViewController(_:didCompleteWith:)
साथ कॉल करेंself
self.contact
सेटअप कोड में, सुनिश्चित करें कि swizzleMethod कॉल के
बजाय वर्ग class_getInstanceMethod
निर्दिष्ट करता CNContactViewController
हैself
और स्विफ्ट कोड:
class MyClass: CNContactViewControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.changeImplementation()
}
func changeCancelImplementation() {
let originalSelector = Selector(("editCancel:"))
let swizzledSelector = #selector(CNContactViewController.cancelHack)
if let originalMethod = class_getInstanceMethod(object_getClass(CNContactViewController()), originalSelector),
let swizzledMethod = class_getInstanceMethod(object_getClass(CNContactViewController()), swizzledSelector) {
method_exchangeImplementations(originalMethod, swizzledMethod)
}
}
func contactViewController(_ viewController: CNContactViewController, didCompleteWith contact: CNContact?) {
// dismiss the contacts controller as usual
viewController.dismiss(animated: true, completion: nil)
// do other stuff when your contact is canceled or saved
...
}
}
extension CNContactViewController {
@objc func cancelHack() {
self.delegate?.contactViewController?(self, didCompleteWith: self.contact)
}
}
कीबोर्ड अभी भी पल-पल दिखाता है लेकिन संपर्क नियंत्रक के खारिज होने के बाद ही गिरता है।
आशा है कि सेब इसे ठीक करता है