ios CNContactViewController不提供“完成”按钮[关闭]

xuo3flqw  于 2023-01-18  发布在  iOS
关注(0)|答案(1)|浏览(118)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
2天前关闭。
Improve this question
我正在使用cncontactviewcontroller为新客户端输入信息。但是无论我如何呈现CNContactViewController,我在顶部栏中只得到一个“取消”按钮...没有完成按钮,也没有任何其他方法来关闭控制器。
如何启用“完成”按钮(或用户接受新输入的联系人信息的任何其他方式)?
我看到这个问题,但没有帮助完成按钮... CNContactViewController does something strange with responder chain
谢谢

hiz5n14c

hiz5n14c1#

您可以将CNContactViewController子类化,以便将done按钮添加到navigationItem
大概是这样的

import ContactsUI

class ContactDetailsViewController: CNContactViewController {
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        updateNavigationItem()
    }

    override func setEditing(_ editing: Bool, animated: Bool) {
        super.setEditing(editing, animated: animated)

        updateNavigationItem()
    }

    private func updateNavigationItem() {
        if !isEditing {
            // add a 0.5 seconds delay to add button after the editing animation finishes
            DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
                self.navigationItem.leftBarButtonItem = .init(
                    barButtonSystemItem: .done,
                    target: self,
                    action: #selector(self.doneTapped)
                )
            }
        }
    }

    @objc private func doneTapped() {
        dismiss(animated: true)
    }
}

为了使用此类,请确保ContactDetailsViewController嵌入在UINavigationController中。
虽然我这么晚才回答,但我希望这对你或其他人有帮助。

相关问题