ধন্যবাদ, আপনার কাজের জন্য @GxocT, তবে, এখানে পোস্ট করা সমাধানটি আপনি রেডডিতে পোস্ট করেছেন তার চেয়ে আলাদা।
রেডডিতে থাকা ব্যক্তিটি আমার পক্ষে কাজ করে, আমি এখানে এটি পুনরায় পোস্ট করতে চাই না। পার্থক্যটি সুইজলেড ম্যাথোডের সাথে লাইনে রয়েছে যা হওয়া উচিত:
let swizzledMethod = class_getInstanceMethod(object_getClass(self), swizzledSelector) {
পুরো আপডেট হওয়া কোডটি হ'ল:
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)
}
}