- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经研究这个问题好几天了,似乎 SwiftUI 的相对“新奇”似乎对我没有帮助。
我的直觉是我以某种方式使用 CNContactViewControllerDelegate
错了,但苹果的文档以及其他关于 SO 的问题都让它看起来应该可以工作。或许,也是.sheet
造成的的处理,但我也无法隔离问题。不包装 NewContactView
里面 NavigationView
也没有任何区别并删除了默认导航栏(如预期的那样)。
我正在展示 CNContactViewController
与 init(forNewContact:)
让应用程序的用户能够添加新联系人。持久化并且一切正常,但是,似乎没有一个委托(delegate)的函数被调用。
使用 iOS 13 中引入的“滑动关闭”手势关闭模式既不会调用委托(delegate)函数,也不会使用 CNContactViewController
提供的导航按钮.
import Foundation
import SwiftUI
import ContactsUI
struct NewContactView: UIViewControllerRepresentable {
class Coordinator: NSObject, CNContactViewControllerDelegate, UINavigationControllerDelegate {
func contactViewController(_ viewController: CNContactViewController, didCompleteWith contact: CNContact?) {
if let c = contact {
self.parent.contact = c
}
viewController.dismiss(animated: true)
}
func contactViewController(_ viewController: CNContactViewController, shouldPerformDefaultActionFor property: CNContactProperty) -> Bool {
return true
}
var parent: NewContactView
init(_ parent: NewContactView) {
self.parent = parent
}
}
@Binding var contact: CNContact
init(contact: Binding<CNContact>) {
self._contact = contact
}
typealias UIViewControllerType = CNContactViewController
func makeCoordinator() -> Coordinator {
return Coordinator(self)
}
func makeUIViewController(context: UIViewControllerRepresentableContext<NewContactView>) -> NewContactView.UIViewControllerType {
let vc = CNContactViewController(forNewContact: CNContact())
vc.delegate = makeCoordinator()
return vc
}
func updateUIViewController(_ uiViewController: NewContactView.UIViewControllerType, context: UIViewControllerRepresentableContext<NewContactView>) {
}
}
显示 Controller 的 View 代码如下所示:
.sheet(isPresented: self.$viewModel.showNewContact, onDismiss: { self.viewModel.fetchContacts() }) {
NavigationView() {
NewContactView(contact: self.$viewModel.newContact)
}
}
感谢您的任何指点!可悲的是,橡皮鸭没有帮助......
最佳答案
SwiftUI 自己创建协调器并在上下文中提供它来表示,所以只需使用
func makeUIViewController(context: UIViewControllerRepresentableContext<NewContactView>) -> NewContactView.UIViewControllerType {
let vc = CNContactViewController(forNewContact: CNContact())
vc.delegate = context.coordinator // << here !!
return vc
}
关于ios - 在 SwiftUI 中使用协调器模式时未调用 CNContactViewControllerDelegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62673089/
在我们的数据库表上,我们使用两个唯一的非聚集索引来创建跨四个字段的唯一约束。我们使用两个,因为其中一个字段 ZipCode 是一个可为空的字段。如果表中存在一条包含 ZipCode 的 null 条目
我刚刚开始学习 Rails 3 教程,以便对框架有一点熟悉,但我在生成 schema.rb 时遇到了问题。我的操作系统是 Windows 7 x64、Ruby 1.9.2、MySQL2 gem 0.2
我是一名优秀的程序员,十分优秀!