如何在 swiftUI 视图中使用按钮? [关闭]

Posted

技术标签:

【中文标题】如何在 swiftUI 视图中使用按钮? [关闭]【英文标题】:How do I use a Button in a swiftUI view? [closed] 【发布时间】:2020-04-24 18:05:43 【问题描述】:

如何在 swiftUI 视图中使用按钮?该视图将只包含按钮和一些文本。当按钮被点击时,它将执行一个功能,改变文本中的单词,然后等待另一个按钮点击并重复。我可以使用 UIKit 轻松完成,但使用 swiftUI 按钮似乎比我预期的要复杂。

【问题讨论】:

【参考方案1】:

因此,您可以创建一个可以在许多视图上使用的自定义按钮。

/// Custom button that can be used in any view
struct CustomButton: View 

  // This is the custom method called from other views
  var action: () -> ()

  var body: some View 
    VStack 
      Button(action:  self.action() ) 
        Text("Tap me")
      
    
  

然后,您可以在主视图中以这种方式使用它并更改文本。您可以在 changeMyText 方法中添加任何您想要的内容。

// Your main view
struct ContentView: View 

  // Keep track of the change of a tap
  @State private var buttonTapped = false

  var body: some View 
    VStack(spacing: 50) 

      Text(buttonTapped ? "My second Text" : "My first text")

      // Declare your custom button with desired functions
      CustomButton(action:  self.changeMytext() )
    
  

  // Method where you perform whatever you need
  func changeMytext() 
    self.buttonTapped.toggle()
  

【讨论】:

在这个例子中,是什么导致 ContentView 在点击按钮后重新显示?我希望看到类似于 UIKit 的“setNeedsDisplay”的东西,但我没有看到。 ContentView 触发器显示是否有任何变化? ContentView 是一个结构,因此是静态的。触发视图更改的对象是@State。每次“@State”值发生变化时,视图本身都会重新计算应该显示哪些变化,并用新的变化重写自己。与 UIKit 相比,这是一个很大的不同,这就是为什么在 SwiftUI 中你不再需要 ViewController。

以上是关于如何在 swiftUI 视图中使用按钮? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - 如何关闭工作表视图,同时关闭该视图

如何将关闭按钮从 swiftui 视图的主结构(由 uihostingviewcontroller 呈现)分离到它自己的结构?

iOS 16.2 在 SwiftUI 子视图中无法关闭弹出的(sheet)导航视图(NavigationView)之解决

如何在 SwiftUI 中创建共享导航栏以在多个视图之间进行交互? [关闭]

SwiftUI - 如何将视图关闭到根目录,然后立即推送第二个视图?

如何使用 SwiftUI 在动作关闭中获取按钮本身?