Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios CNContactViewController取消按钮不工作_Ios_Swift - Fatal编程技术网

Ios CNContactViewController取消按钮不工作

Ios CNContactViewController取消按钮不工作,ios,swift,Ios,Swift,我正在尝试使用内置的新联系人界面,但“取消”按钮出现意外行为。下面的代码起作用并调用新联系人屏幕,但“取消”按钮将仅清除屏幕条目,而不会从新联系人屏幕中取消。在内置联系人应用程序中,点击取消返回联系人列表屏幕。我想用“取消”按钮把窗户关上 @IBAction func newTwo(sender: AnyObject) { AppDelegate.getAppDelegate().requestForAccess { (accessGranted) -> Void in

我正在尝试使用内置的新联系人界面,但“取消”按钮出现意外行为。下面的代码起作用并调用新联系人屏幕,但“取消”按钮将仅清除屏幕条目,而不会从新联系人屏幕中取消。在内置联系人应用程序中,点击取消返回联系人列表屏幕。我想用“取消”按钮把窗户关上

@IBAction func newTwo(sender: AnyObject) {
    AppDelegate.getAppDelegate().requestForAccess { (accessGranted) -> Void in
        if accessGranted {
            let npvc = CNContactViewController(forNewContact: nil)
            npvc.delegate = self
            self.navigationController?.pushViewController(npvc, animated: true)
         }
    }

}

您是否实现了CNContactViewControllerDelegate方法? 这是

例如:

 func contactViewController(viewController: CNContactViewController, didCompleteWithContact contact: CNContact?) {

    self.dismissViewControllerAnimated(true, completion: nil)
}

解除联系的更好方法是检查联系人是否为零,然后解除联系。如果从导航控制器推送视图控制器,则“取消”不起作用。您可能必须执行以下操作:

func contactViewController(viewController: CNContactViewController, didCompleteWithContact contact: CNContact?) {
  if let contactCreated =  contact
  {

  }
  else
  {
    _ = self.navigationController?.popViewController(animated: true)
  }
}

它使用以下代码为我工作:

Swift 3

func contactViewController(_ vc: CNContactViewController, didCompleteWith con: CNContact?) {
    vc.dismiss(animated: true)
}
我还改变了呼叫控制器的方式:

而不是:

self.navigationController?.pushViewController(contactViewController, animated: true)
解决办法是:

self.present(UINavigationController(rootViewController: contactViewController), animated:true)

我使用iOS 12中的示例代码找到了解决方案:

:取消按钮似乎“正常”工作,也就是说,点击它会丢弃数据并在屏幕上删除工作表。在iOS 13中:“取消”按钮似乎是“倒退”的,因为它只会取消一张空表。如果您在任何字段中键入了任何内容,则在您清除这些字段之前,它将不会关闭。(我使用引号是因为我不知道官方预期的行为)…而iOS13似乎是因为键盘没有自动关闭,这使得它覆盖了带有确认对话框的操作表。