相关疑难解决方法(0)

SwiftUI ButtonStyle - 如何检查按钮是否被禁用或启用?

要在 SwiftUI 中设置按钮样式,根据我的理解,您需要扩展ButtonStyle和实现,func makeBody(configuration: Self.Configuration) -> some View在其中开始configuration.labelButton视图的引用应用修改。

现在,除了label字段之外,ButtonStyle.Configuration还有一个布尔字段 for isPressed,但这似乎就是全部。

如何检查按钮是启用还是禁用?

例如,我想在按钮周围绘制一个边框,如果按钮启用,我希望边框为蓝色,如果禁用,则边框为灰色。

我的第一个猜测是这样的:

    func makeBody(configuration: Self.Configuration) -> some View {
        configuration.label
            .overlay(
                RoundedRectangle(cornerRadius: 4).stroke(configuration.isEnabled ? Color.blue : Color.gray, lineWidth: 1).padding(8)
            )
    }
Run Code Online (Sandbox Code Playgroud)

但是没有isEnabled领域。

Apple 提供的PlainButtonStyle显然可以访问这些信息,因为头文件中的 doc 注释声明它说“样式可以应用视觉效果来指示按钮的按下、聚焦或启用状态”。

/// A `Button` style that does not style or decorate its content while idle.
///
/// The style may apply a visual effect to indicate …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui

28
推荐指数
5
解决办法
6663
查看次数

SwiftUI无法使用HStack的Spacer

我有一个列表视图,列表的每一行都包含一个带有某些文本视图和图像的HStack,如下所示:

HStack{
    Text(group.name)
    Spacer()
    if (groupModel.required) { Text("Required").color(Color.gray) }
    Image("ic_collapse").renderingMode(.template).rotationEffect(Angle(degrees: 90)).foregroundColor(Color.gray)
}.tapAction { self.groupSelected(self.group) }
Run Code Online (Sandbox Code Playgroud)

这似乎很好用,除了当我在文本和图像之间的空白区域(Spacer()是)轻拍时,tap动作未注册。仅当我在文本或图像上点击时,才会发生点击动作。

其他人是否遇到过此问题/知道解决方法?

ios swift swiftui

7
推荐指数
6
解决办法
513
查看次数

如何在 swiftui 中按下按钮时更改按钮图像

我想在按下按钮时更改图像名称。

到目前为止,这是我的结构:

struct ContentView: View { 
    @State var matrix = [Int] var 
    body: some View { 
        VStack { 
            Text("Test") 
            HStack(alignment: .center, spacing: 8) { 
                Button(action: { 
                    **
                    // call a func that will do some check and 
                    // change the image from Blue.png to Red.png
                    ** 
                }) { 
                    Image("Blue") 
                        .renderingMode(.original)
                        .resizable()                               
                        .aspectRatio(contentMode: .fill)
                        .clipShape(Circle()) 
                } 
            } 
        } 
    } 
 } 
Run Code Online (Sandbox Code Playgroud)

image button swift

7
推荐指数
1
解决办法
2553
查看次数

如何在 SwiftUI 中检测按下按钮并采取行动

我想在开始按下按钮时执行一个操作,然后在停止按下按钮时执行一个操作。我一直在寻找一个简单的解决方案,但遇到了更复杂的配置。我从BlueSpud获得的一个选项非常简单且接近。按钮操作未使用,所以我尝试:

    struct MyView: View {
    @State private var pressing = false

    var body: some View {

        Text("Button")
            .background(self.pressing ? Color.red : Color.blue)
            .gesture(DragGesture(minimumDistance: 0.0)
                .onChanged { _ in
                    self.pressing = true
                    print("Pressing started and/or ongoing")
            }
            .onEnded { _ in
                self.pressing = false
                print("Pressing ended")
            })
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码的问题在于,如果您在按下时将手指拖出按钮区域,则 .onEnded 永远不会被调用,并且如果没有可靠的事件结束,该解决方案将不起作用。

我还尝试过 Apple 的编写 SwiftUI 手势的示例。它提供了对按下和未按下状态的非常一致的控制,但我似乎不知道在哪里插入我的动作:

struct PressedButton: View {

    var startAction: ()->Void
    var endAction: ()->Void

    enum DragState {
        case inactive
        case pressing
        case dragging(translation: CGSize) …
Run Code Online (Sandbox Code Playgroud)

button ios swiftui

5
推荐指数
2
解决办法
7393
查看次数

带有 NavigationLink 的 SwiftUI 列表如何在点击时自定义突出显示

我如何在列表行上制作自定义叠加层,以便在点击时突出显示它。我正在使用NaviagationLink并且我已经改变了

UITableViewCell.appearance().cellSelectionStyle = .none 
Run Code Online (Sandbox Code Playgroud)

为了不使用默认的灰色选择。

我试图向@State isSelected我的 Cell添加一些,但我不知道如何/何时更改它以获得这种影响。我试图添加,onTapGesture()但它阻止了 NavigationLink,并且不提供开始、结束状态,刚刚结束。

list swiftui navigationlink

3
推荐指数
2
解决办法
4683
查看次数

标签 统计

swiftui ×4

ios ×3

swift ×3

button ×2

image ×1

list ×1

navigationlink ×1