Geçici çözümünüz için teşekkürler, @GxocT, burada yayınlanan çözüm Reddit'te yayınladığınız çözümden farklıdır.
Reddit'teki benim için çalışıyor, bu öyle değil, burada yeniden yayınlamak istiyorum. Fark, olması gereken swizzledMethod ile doğrudur:
let swizzledMethod = class_getInstanceMethod(object_getClass(self), swizzledSelector) {
Güncellenen kodun tamamı:
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(self), 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)
}
}