Я пытаюсь понять, как использовать панель навигации в SwiftUI.
Я хочу поместить BarButtonItem и изображения внутри NavigationBar
Я смог отобразить панель навигации и поставить заголовки

var body: some View {
NavigationView{
List(0...5) { note in
VStack(alignment: .leading) {
Text("title")
Text("Date")
.font(.subheadline)
.foregroundColor(.secondary)
}
}
.navigationBarTitle(Text("Notes"))
}
}





Вы должны использовать модификатор toolbar:
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
Button("Cancel") { /* action */ }
}
ToolbarItem(placement: .navigationBarTrailing) {
Button(action: { /* Actions */ }, label: {
HStack {
Image(systemName: "trash")
Text("Delete")
}
})
.foregroundColor(.red) // You can apply colors and other modifiers too
}
}
Note 1: You can have ANYView there. (not only a Button) and also any modifiers
Note 2: Both codes above and below will generate the same look items but with different approachs
Вы должны использовать модификатор .navigationBarItems(). Например, вы можете добавить Button или Image следующим образом:
.navigationBarItems(
leading: Button("Cancel") {
// Actions
},
trailing: Button(action: {
// Actions
}, label: { Label("Delete", systemImage: "trash") }
).foregroundColor(.red) // You can apply colors and other modifiers too
)
? Профессиональный СОВЕТ
Всегда старайтесь инкапсулировать каждый элемент в отдельную структуру, чтобы ваш код был упрощен и его было легко заменить новыми технологиями. например, взгляните на этот образец:
.navigationBarItems(
leading: MyCustomButtonItem(),
trailing: MyCustomButtonItem(text: "foo", image: "Bard")
)
Да, EditButton() @Юто
@MojtabaHosseini Я следую вашему коду и пытаюсь добавить UIBarButton примерно так: .navigationBarTitle("(task.label)") .navigationBarItems(trailing: NavigationButtonItem()), но я не могу добавить действие на кнопку. Подскажите, в чем может быть возможная проблема?
.navigationBarItems() — это функция, которую вы ищете. Вы можете указать ведущее представление, замыкающее представление или оба. В представлении вы можете указать горизонтальные и вертикальные стеки, чтобы добавить дополнительные кнопки.
var body: some View {
NavigationView{
List(0...5) { note in
VStack(alignment: .leading) {
Text("title")
Text("Date")
.font(.subheadline)
.foregroundColor(.secondary)
}
}
.navigationBarItems(leading: HStack {
Button(action: {}, label: {Image(systemName: "star.fill")})
Button(action: {}, label: {Text("Edit")})
}, trailing: VStack {
Button(action: {}, label: {Image(systemName: "star.fill")})
Button(action: {}, label: {Text("Edit")})
})
.navigationBarTitle(Text("Notes"))
}
}
поместите это из parentViewController
NavigationLink(destination: NotesListView())
В SwiftUI 2 / iOS 14 модификатор navigationBarItems — устарел.
Вместо этого мы должны использовать панель инструментов с ToolbarItems.
NavigationView {
List {
// ...
}
.navigationTitle("Notes")
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
Button("Tap me") {
// action
}
}
ToolbarItem(placement: .navigationBarTrailing) {
Image(systemName: "plus")
}
}
}
Вы можете увидеть документация для большего количества ToolbarItemPlacements.
В обычном быстром написании есть .editbutton, который можно использовать для создания кнопок редактирования и выполнения большинства действий за вас. Есть ли что-то подобное в SwiftUI?