更新 SwiftUI 中的 inputAccessoryView (UIViewRepresentable)
Posted
技术标签:
【中文标题】更新 SwiftUI 中的 inputAccessoryView (UIViewRepresentable)【英文标题】:Update inputAccessoryView in SwiftUI (UIViewRepresentable) 【发布时间】:2021-07-26 11:18:03 【问题描述】:我想使用 SwiftUI 在键盘上方显示搜索结果。为此,我为UITextField
制作了一个UIViewRepresentable
,并相应地设置了inputAccessoryView
。
一切都正确显示,但inputAccessoryView
没有更新。
struct V_ToolbarTextField<Content: View>: UIViewRepresentable
var title: String
@Binding var text: String
var keyType: UIKeyboardType
var toolbarContent: Content
init(_ title: String,
text: Binding<String>,
keyType: UIKeyboardType = .alphabet,
toolbarContent: Content)
self.title = title
self._text = text
self.keyType = keyType
self.toolbarContent = toolbarContent
func makeUIView(context: Context) -> UITextField
let textfield = UITextField()
textfield.keyboardType = keyType
textfield.placeholder = title
let textUIKit = UIHostingController(rootView: toolbarContent)
textUIKit.view.frame = CGRect(x: 0, y: 0, width: 800, height: 60)
textfield.inputAccessoryView = textUIKit.view
return textfield
func updateUIView(_ uiView: UITextField, context: Context)
uiView.text = text
这就是我传递inputAccessoryView
内容的方式:
V_ToolbarTextField("Title",
text: $gameNameFilter,
toolbarContent:
viewContainingSearchResults())
我尝试绑定toolbarContent
并在updateUIView()
中设置inputAccessoryView
。我也尝试过创建一个 Coordinator 类并将UITextField
的委托设置为它,希望使用UITextFieldDelegate
函数来更新它,但我不知道是哪一个,我无法设置正确委派。
【问题讨论】:
你能显示viewContainingSearchResults()
的代码
@cedricbahirwe 我已经用一个简单的 TextView() 尝试过,即使绑定的文本没有更新,所以这不是问题
【参考方案1】:
我无法让它工作,并放弃了inputAccessoryView
,而是使用底部的工具栏VStack
。显示键盘时我将其隐藏。
@State var keyboardOpen = false
VStack
// everything else...
if (keyboardOpen)
V_FilteredGameList(filter: vm.gameName, action: game in
vm.setExistingGame(game: game)
hideKeyboard()
)
.onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardWillShowNotification)) _ in
keyboardOpen = true
.onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardWillHideNotification)) _ in
keyboardOpen = false
【讨论】:
以上是关于更新 SwiftUI 中的 inputAccessoryView (UIViewRepresentable)的主要内容,如果未能解决你的问题,请参考以下文章