SwiftUI-如何在另一个视图中响应TextField onCommit?

科恩

我提出了一个SearchBarView可以在其他各种视图中使用的视图(为清楚起见,我删除了所有布局修改器,例如颜色和填充):

struct SearchBarView: View {
    @Binding var text: String
    @State private var isEditing = false
    
    var body: some View {
        HStack {
            TextField("Search…", text: $text, onCommit: didPressReturn)
                 .overlay(
                    HStack {
                        Image(systemName: "magnifyingglass")
                            .frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
                        
                        if isEditing {
                            Button(action: {
                                self.text = ""
                            }) {
                                Image(systemName: "multiply.circle.fill")
                            }
                        }
                    }
                )
    }
    
    func didPressReturn() {
        print("did press return")
    }
}

它看起来非常有效,可以过滤List

但是现在我想使用SearchBarView来搜索外部数据库。

struct SearchDatabaseView: View {
    @Binding var isPresented: Bool
    @State var searchText: String = ""

    var body: some View {
        NavigationView {
            VStack {
                SearchBarView(text: $searchText)
                // need something here to respond to onCommit and initiate a network call.

            }
            .navigationBarTitle("Search...")
            .navigationBarItems(trailing:
                Button(action: { self.isPresented = false })  {
                    Text("Done")
            })
        }
    }
}

为此,我只想在用户点击回车时启动网络访问。因此,我将onCommit零件添加SearchBarView,并且didPressReturn()仅在点击return时才调用函数。到现在为止还挺好。

我不明白的是SearchDatabaseView其中包含的内容SearchBarView可以响应onCommit并启动数据库searh-我该怎么做?

他的脾气

这是可能的方法

struct SearchBarView: View {
    @Binding var text: String
    var onCommit: () -> () = {}   // inject callback

    @State private var isEditing = false
    
    var body: some View {
        HStack {
            TextField("Search…", text: $text, onCommit: didPressReturn)
                 .overlay(
                    HStack {
                        Image(systemName: "magnifyingglass")
                            .frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
                        
                        if isEditing {
                            Button(action: {
                                self.text = ""
                            }) {
                                Image(systemName: "multiply.circle.fill")
                            }
                        }
                    }
                )
    }
    
    func didPressReturn() {
        print("did press return")
       // do internal things...

       self.onCommit()      // << external callback
    }
}

所以现在SearchDatabaseView你可以

VStack {
    SearchBarView(text: $searchText) {
      // do needed things here ...
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么基于可用的`init`方法不需要`onEditingChanged`和`onCommit`的SwiftUI TextField参数?

来自分类Dev

SwiftUI:如何在另一个视图中更新传递的数组项

来自分类Dev

如何从SwiftUI的另一个视图中删除列表的项目?

来自分类Dev

SwiftUI:如何根据视图中的另一个变量初始化变量

来自分类Dev

如何在SwiftUI中根据另一个视图的变量显示视图(在ContentView中)?

来自分类Dev

如何在SwiftUI中从一个视图重定向到另一个视图?

来自分类Dev

如何在SwiftUI中将值从一个视图自动发布到另一个视图?

来自分类Dev

在视图中使用来自另一个视图的数据触发Modal SwiftUI

来自分类Dev

如何在SwiftUI中从工作表视图转到另一个页面?

来自分类Dev

嵌入到另一个视图中时,SwiftUI动画不起作用

来自分类Dev

SwiftUI对另一个视图中的动态部分进行重新排序

来自分类Dev

从SwiftUI的另一个视图设置@State var

来自分类Dev

SwiftUI从另一个视图捕获Picker值

来自分类Dev

如何在SwiftUI中以编程方式切换到另一个视图(无需按下按钮)

来自分类Dev

如何在SwiftUI上推送到有关DatePicker选择更改的另一个视图

来自分类Dev

Swiftui如何在调用视图时将带有参数的视图传递给另一个将设置参数的视图

来自分类Dev

SwiftUI:如何将一个视图作为参数传递给另一个视图以获取底表?

来自分类Dev

SwiftUI-如何将Date()作为字符串传递给另一个视图?

来自分类Dev

SwiftUI-如何使用Firebase中的字符串从另一个视图更新@state变量?

来自分类Dev

swiftui有条件地渲染一个视图或另一个视图

来自分类Dev

SwiftUI NavigationLink如何进入另一个SwiftUI页面?

来自分类Dev

SwiftUI获取对象以响应另一个对象的大小

来自分类Dev

从另一个视图将变量传递给SwiftUI AVPlayer

来自分类Dev

swiftui将变量传递到另一个视图

来自分类Dev

SwiftUI-将工作表转移到另一个视图

来自分类Dev

SwiftUI通过引用将类对象传递给另一个视图

来自分类Dev

SwiftUI:保存MapKit注释数据以传递到另一个视图

来自分类Dev

从另一个视图将变量传递给SwiftUI AVPlayer

来自分类Dev

SwiftUI:如何在SwiftUI视图中取消计时器?

Related 相关文章

  1. 1

    为什么基于可用的`init`方法不需要`onEditingChanged`和`onCommit`的SwiftUI TextField参数?

  2. 2

    SwiftUI:如何在另一个视图中更新传递的数组项

  3. 3

    如何从SwiftUI的另一个视图中删除列表的项目?

  4. 4

    SwiftUI:如何根据视图中的另一个变量初始化变量

  5. 5

    如何在SwiftUI中根据另一个视图的变量显示视图(在ContentView中)?

  6. 6

    如何在SwiftUI中从一个视图重定向到另一个视图?

  7. 7

    如何在SwiftUI中将值从一个视图自动发布到另一个视图?

  8. 8

    在视图中使用来自另一个视图的数据触发Modal SwiftUI

  9. 9

    如何在SwiftUI中从工作表视图转到另一个页面?

  10. 10

    嵌入到另一个视图中时,SwiftUI动画不起作用

  11. 11

    SwiftUI对另一个视图中的动态部分进行重新排序

  12. 12

    从SwiftUI的另一个视图设置@State var

  13. 13

    SwiftUI从另一个视图捕获Picker值

  14. 14

    如何在SwiftUI中以编程方式切换到另一个视图(无需按下按钮)

  15. 15

    如何在SwiftUI上推送到有关DatePicker选择更改的另一个视图

  16. 16

    Swiftui如何在调用视图时将带有参数的视图传递给另一个将设置参数的视图

  17. 17

    SwiftUI:如何将一个视图作为参数传递给另一个视图以获取底表?

  18. 18

    SwiftUI-如何将Date()作为字符串传递给另一个视图?

  19. 19

    SwiftUI-如何使用Firebase中的字符串从另一个视图更新@state变量?

  20. 20

    swiftui有条件地渲染一个视图或另一个视图

  21. 21

    SwiftUI NavigationLink如何进入另一个SwiftUI页面?

  22. 22

    SwiftUI获取对象以响应另一个对象的大小

  23. 23

    从另一个视图将变量传递给SwiftUI AVPlayer

  24. 24

    swiftui将变量传递到另一个视图

  25. 25

    SwiftUI-将工作表转移到另一个视图

  26. 26

    SwiftUI通过引用将类对象传递给另一个视图

  27. 27

    SwiftUI:保存MapKit注释数据以传递到另一个视图

  28. 28

    从另一个视图将变量传递给SwiftUI AVPlayer

  29. 29

    SwiftUI:如何在SwiftUI视图中取消计时器?

热门标签

归档