Kudos to @GxocT untuk solusi hebatnya! Sangat membantu pengguna saya.
Tapi saya ingin membagikan kode saya berdasarkan solusi @GxocT dengan harapan itu akan membantu orang lain dalam skenario ini.
Saya perlu saya CNContactViewControllerDelegate contactViewController(_:didCompleteWith:)dipanggil batal (dan juga dilakukan).
Juga kode saya tidak dalam UIViewControllersehingga tidak adaself.navigationController
Saya juga tidak suka menggunakan kekuatan membuka ketika saya bisa membantu. Saya telah digigit di masa lalu jadi saya dirantai if letdi setup
Inilah yang saya lakukan:
Perpanjang CNContactViewControllerdan letakkan fungsi swizzle di
sana.
Dalam kasus saya dalam fungsi swizzle panggil saja
CNContactViewControllerDelegatedelegasi
contactViewController(_:didCompleteWith:)dengan selfdan
self.contactobjek dari pengontrol kontak
Dalam kode pengaturan, pastikan panggilan swizzleMethod untuk
class_getInstanceMethodmenentukan CNContactViewController
kelas, bukanself
Dan kode Swift:
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)
}
}
Keyboard masih muncul sesaat tetapi turun tepat setelah pengontrol Kontak ditolak.
Mari berharap apel memperbaikinya