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다음과 같이 만들지 UIKitSwiftUI 에 가져올 수정자를 찾을 수 없거나 어쨌든 찾을 수 없습니다 .

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에는 컨텍스트에서 버튼을 허용하지 않는 버그가 있다고 생각합니다 메뉴는 빨간색 이외의 다른 색상으로 표시됩니다. 그렇지 않으면 버튼을 .disabled(true)회색으로 설정하고 비활성화하고 버튼의 전경색을 빨간색 ( foregroundColor(.red))으로 설정하면 버튼이 손상됩니다.


당신은 대부분 괜찮습니다. Else 부분 만 필요하지 않습니다.
E.Coms 2009 년

1
당신은 내 질문을 오해했습니다. 나는로 구성 버튼에 원하는 파괴 (빨간색) 또는 비활성화 (회색 및 비활성)
모즈 타바 호세 이니에게

1
@MojtabaHosseini 잘못 해석해서 죄송합니다! SwiftUI에는 현재 상황에 맞는 메뉴 옵션으로 색상을 변경할 수없는 버그가 있다고 생각합니다. 검은 색 일뿐입니다. 버그 보고서를 제출하면 도움이 될 수 있습니다.
RPatel99

downvoting 사람들에게 : 답변 게시 한 후 OP는 질문 변경했습니다 . 질문의 초기 문구는 OP가 상황에 맞는 메뉴를 사용하여보기를 삭제하는 방법을 알아야하는 것처럼 보였습니다. 이 질문에 대한 유일한 답변이므로 내 답변을 삭제하지 않고 여전히 질문과 관련이 있으며 사람들에게 유용 할 수 있다고 생각합니다.
RPatel99 2018
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.