SwiftUIで削除および無効化するためのContextMenuボタンを構成する方法


9

でボタンを設定しようとしましたがcontextMenu、機能しません。

Text("A label that have context menu")
    .contextMenu {
        Button(action: {
            // remove it
        }) {
            Text("Remove")
                .foregroundColor(.red) // Not working
            Image(systemName: "trash")
        }.disabled(true) // Not working
    }

私が持っているもの:

 機能しない外観

私が探しているもの:(削除ボタンと呼び出しボタン)

デモ

私はUIAction次のようなものを作成しますが、UIKitこれをSwiftUIに持ち込むための修飾子を見つけることができません。

let delete = UIAction(title: "Remove", image: UIImage(systemName: "trash"), attributes: .destructive) { action in
    // remove it
}

答えは見つかりましたか?
Andrea Miotto

(純粋なSwiftUIでは)まだ可能ではないようです。
Mojtaba Hosseini、

回答:


-2

ビューが表示されるかどうかを決定するブール値を切り替えると機能します。

struct ContentView: View {
    @State var textVisible = true
    var body: some View {
        Group {
            if textVisible {
                Text("Hello World")
                .contextMenu {
                    Button(action: {
                        self.textVisible = false
                    }) {
                        HStack {
                            Text("Remove")
                            Image(systemName: "trash")
                        }
                    }
                }
            }
        }
    }
}

もちろん、コンテキストメニューはText削除されたに関連付けられているためButton、ブール値を切り替える何か(textVisibleこの場合)がない限り、完全に削除されます。

編集:OPは、コンテキストメニューのボタンを無効/破壊的(灰色/赤の前景色)にする方法を知りたいと思っていましたが、2019年10月20日の時点で、SwiftUIにはコンテキスト内のボタンを許可しないバグがあると思いますメニューを赤以外の色にする。そうでない場合は、ボタンをasに設定​​する.disabled(true)と灰色になり、ボタンが無効になり、ボタンの前景色を赤(foregroundColor(.red))に設定すると、ボタンが破壊されます。


答えはほとんど問題ありません。Else部分だけは必要ありません。
E.Coms

1
あなたは私の質問を誤解しました。ボタンを破壊的(赤)または無効(灰色で非アクティブ)
Mojtaba Hosseini

1
@MojtabaHosseini誤解してすみません!SwiftUIには現在、コンテキストメニューオプションで色を変更できないバグがあり、黒でしか表示できないというバグがあると思います。バグレポートを提出することは有益だと思うかもしれません。
RPatel99

それらの反対投票へ:私が私の答えを投稿した、OPは彼の質問を変更しました。質問の最初の言い回しは、OPがコンテキストメニューを使用してビューを削除する方法を知るだけでよいように見えた。私の回答はこの質問に対する唯一の回答であるため、削除していません。それでも、質問に関連しており、人々にとって役立つ可能性があると考えています。
RPatel99
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.