ios - CNContactViewController 导航栏颜色无法正常工作
问题描述
当我单击创建新联系人选项时,CNContactViewController 导航栏颜色未出现。第一次查看我的屏幕没关系,但是当我单击创建新联系人时,我没有获得导航栏颜色并且不可见后退按钮。
第一个屏幕
第二屏
在旧版本中
我的代码是
if #available(iOS 9.0, *) {
let store = CNContactStore()
let contact = CNMutableContact()
let homePhone = CNLabeledValue(label: CNLabelHome, value: CNPhoneNumber(stringValue : self.mobile ?? ""))
contact.phoneNumbers = [homePhone]
let controller = CNContactViewController(forUnknownContact : contact)
controller.contactStore = store
controller.delegate = self
if #available(iOS 10.0, *) {
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(0.1 * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: {
//Set status bar background colour
let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView
statusBar?.backgroundColor = UIColor.red
//Set navigation bar subView background colour
for view in controller.navigationController?.navigationBar.subviews ?? [] {
view.tintColor = UIColor.white
view.backgroundColor = UIColor.red
}
})
}
navigationController?.pushViewController(controller, animated: true)
}
另外一个是默认电话号码:(913) 351-5518
解决方案
我建议在 UINavigationController 中以 Popover Modal Presentation 样式显示 CNConctactViewController,并添加一些按钮以返回主应用程序。正如网络上的谣言所报道的那样,这种实现并非微不足道。
让我分享一些我的代码(swift 5)。
大班:
class MyViewController: UITableViewController, UIPopoverPresentationControllerDelegate {
var contactViewController = CNContactViewController()
...
@objc func dismissContactViewController() {
contactViewController.dismiss(animated: true, completion: nil)
}
}
扩展:
extension MyViewController: CNContactViewControllerDelegate {
func openCNContactViewController(willAppearWith: CNContact, type: ContactType) {
switch type {
case .forContact:
contactViewController = CNContactViewController(for: willAppearWith)
contactViewController.allowsEditing = false
break
case .forNewContact:
contactViewController = CNContactViewController(forNewContact: willAppearWith)
contactViewController.allowsEditing = true
break
case .forUnknowContact:
contactViewController = CNContactViewController(forUnknownContact: willAppearWith)
contactViewController.allowsEditing = true
break
}
contactViewController.allowsActions = true
contactViewController.contactStore = globalContactStore
contactViewController.hidesBottomBarWhenPushed = true
contactViewController.delegate = self
// define the button (or select a default one)
let button = UIButton(type: .custom)
button.setTitleColor(self.view.tintColor, for: .normal)
button.setTitle("My app name", for: .normal)
button.addTarget(self, action: #selector(dismissContactViewController), for: .touchUpInside)
let closeButton = UIBarButtonItem(customView: button)
closeButton.style = .plain
// add flexible space
let flexibleSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.flexibleSpace, target: nil, action: nil)
// add to toolbar
contactViewController.setToolbarItems([flexibleSpace, closeButton, flexibleSpace], animated: false)
let navigationVC = UINavigationController(rootViewController: contactViewController)
// show toolbar
navigationVC.setToolbarHidden(false, animated: false)
// set navigation presentation style
navigationVC.modalPresentationStyle = .popover
// present view controller
self.present(navigationVC, animated: true, completion: nil)
}
推荐阅读
- android - 无法在颤动中写入文件
- mongodb - 在一个区域内创建一个视图
- python - 如何以识字的方式从网站中的多个URL中提取特定的表格数据(div\tr\td)到CSV(带示例)
- python - 有没有办法根据 Python 中的一列或多列中具有相似值的行来选择表中的某些行?
- javascript - 文件选择器侧边栏通信错误
- wordpress - Wordpress 将数据从一个模板传递到另一个模板
- python - 为什么这个程序没有正确找到数字频率?
- c# - 无法检查整数是否等于零
- nestjs - NestJs 授权/验证用户拥有资源
- python - 如何检查两个列表是否没有相似点?