SwiftUI Как добавить действие на UIBarButtonItem? - PullRequest
2 голосов
/ 31 января 2020

Я использую SwiftUI и добавил Button в NavigationBar, но не могу установить действие для этой кнопки. Я попробовал эти два подхода, но потерпел неудачу.

Подход: 1

.navigationBarTitle("\(task.label)")
.navigationBarItems(trailing: UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(self.actionName)))

Но у меня есть эта ошибка здесь

Тип аргумента 'UIBarButtonItem' не соответствует ожидаемому типу 'View'

Подход: 2

.navigationBarTitle("\(task.label)")
.navigationBarItems(trailing: NavigationBarButtonItem())

struct NavigationBarButtonItem : View {
    var body : some View {
        Button(action: {
            print("Button Tapped")
        }, label: {Text("Done")})
    }
}

Здесь, эти операторы печати никогда не выполняются, хотя Button «Готово» отображается в правой части панели навигации, но действие не работает.

1 Ответ

1 голос
/ 31 января 2020

.navigationBarItems (трейлинг: UIBarButtonItem (...

, приведенное выше определенно неверно - вы пытаетесь передать объект UIKit вместо ожидаемого View struct

следующее одно определенно работает (протестировано с Xcode 11.2 +)

NavigationView {
    // ... some view is here
    .navigationBarItems(trailing: Button("Done") { 
       print("Done something")
    })
}

Хорошо, скопированный "как есть" ваш код из Подход 2 также работает, поэтому, вероятно, причина не в этот код.

Не предоставлен весь ваш код, но я могу предположить, что вы поместили его вне NavigationView, но в c написано:

/// This modifier only takes effect when this view is inside of and visible
/// within a `NavigationView`.
...