.refreshable()
#
Os datos que se amosan nunha pantalla a miúdo cambian co tempo.
- O paradigma estándar dentro das aplicacións iOS é que o usuario realice un refresco cara abaixo para actualizar os datos mostrados.
- Durante o proceso de actualización, a aplicación normalmente mostrará un indicador de progreso xiratorio despois do cal se amosan os datos máis recentes.
Para facilitar isto, SwiftUl proporciona o modificador refreshable()
. Cando se aplica a unha vista, un xesto de refresco cara abaixo nesa vista mostrará o indicador de progreso e executará o código no peche do modificador.
Por exemplo:
import SwiftUI
struct ListaTarefas: Identifiable {
var id = UUID()
var tarefa: String
var nomeImaxe: String
}
struct ContentView: View {
@State var lista: [ListaTarefas] = [
ListaTarefas(tarefa: "Tirar o lixo", nomeImaxe: "trash.circle.fill"),
ListaTarefas(tarefa: "Recoller aos nenos", nomeImaxe: "person.2.fill"),
ListaTarefas(tarefa: "Lavar o coche", nomeImaxe: "car.fill")
]
@State private var estadoBoton = true
var body: some View {
List {
Section(header: Text("Axustes")){
Toggle(isOn: $estadoBoton) {
Text("Permitir notificacións")
}
}
Section(header: Text("Tarefas"), footer: Text("Non te esquezas de nada 🧐")){
ForEach(lista) { tarefa in
HStack {
Image(systemName: tarefa.nomeImaxe)
Text(tarefa.tarefa)
}
}
}
}
.refreshable {
lista += [
ListaTarefas(tarefa: "Encargar a cea", nomeImaxe: "eurosign.circle.fill"),
ListaTarefas(tarefa: "Chamar a miña colega Lola Mento", nomeImaxe: "phone.fill"),
]
}
}
}
.onDelete()
#
É común que unha aplicación permita ao usuario eliminar elementos dunha lista e, nalgúns casos, mesmo mover un elemento dunha posición a outra.
- A eliminación pódese habilitar engadindo un modificador
onDelete()
a cada celda da lista, especificando un método que eliminará o elemento. - Cando se chama a este método, pasaráselle un obxecto
IndexSet
que contén os desprazamentos das filas que se eliminan
import SwiftUI
struct ListaTarefas: Identifiable {
var id = UUID()
var tarefa: String
var nomeImaxe: String
}
struct ContentView: View {
@State var lista: [ListaTarefas] = [
ListaTarefas(tarefa: "Tirar o lixo", nomeImaxe: "trash.circle.fill"),
ListaTarefas(tarefa: "Recoller aos nenos", nomeImaxe: "person.2.fill"),
ListaTarefas(tarefa: "Lavar o coche", nomeImaxe: "car.fill")
]
@State private var estadoBoton = true
var body: some View {
NavigationView {
List {
Section(header: Text("Axustes")){
Toggle(isOn: $estadoBoton) {
Text("Permitir notificacións")
}
}
Section(header: Text("Tarefas"), footer: Text("Non te esquezas de nada 🧐")){
ForEach(lista) { tarefa in
NavigationLink(destination: Text(tarefa.tarefa)){
HStack {
Image(systemName: tarefa.nomeImaxe)
Text(tarefa.tarefa)
}
}
}
.onDelete(perform: borrarTarefa)
}
}
.navigationBarTitle(Text("Lista de tarefas"))
.navigationBarItems(trailing: Button(action: engadirTarefa){
Text("Engadir tarefa")
})
}
}
func engadirTarefa() {
//
}
func borrarTarefa(at offsets:IndexSet) {
//Borrar elementos
}
}
.onMove()
#
Podemos permitir ao usuario mover elementos cara arriba e cara abaixo nunha lista:
- Empregamos o modificador
onMove()
a cada celda da lista, especificando o método que moverá o elemento. - Cando se chama a este método, pasaráselle un obxecto
IndexSet
que contén as posicións das filas que se moven e un enteiro que indica a posición destino - Temos tamén que engadir unha instancia de
EditButton
á lista. Cando se pulsa, este botón cambia a lista ao modo editable e permite que o usuario mova e elimine os elementos. Este botón de edición engádese como un elemento da barra de navegación co modificadornavigationBarltems()
import SwiftUI
struct ListaTarefas: Identifiable {
var id = UUID()
var tarefa: String
var nomeImaxe: String
}
struct ContentView: View {
@State var lista: [ListaTarefas] = [
ListaTarefas(tarefa: "Tirar o lixo", nomeImaxe: "trash.circle.fill"),
ListaTarefas(tarefa: "Recoller aos nenos", nomeImaxe: "person.2.fill"),
ListaTarefas(tarefa: "Lavar o coche", nomeImaxe: "car.fill")
]
@State private var estadoBoton = true
var body: some View {
NavigationView {
List {
Section(header: Text("Axustes")){
Toggle(isOn: $estadoBoton) {
Text("Permitir notificacións")
}
}
Section(header: Text("Tarefas"), footer: Text("Non te esquezas de nada 🧐")){
ForEach(lista) { tarefa in
NavigationLink(destination: Text(tarefa.tarefa)){
HStack {
Image(systemName: tarefa.nomeImaxe)
Text(tarefa.tarefa)
}
}
}
.onDelete(perform: borrarTarefa)
.onMove(perform: moverTarefa)
}
}
.navigationBarTitle(Text("Lista de tarefas"))
.navigationBarItems(trailing: Button(action: engadirTarefa){
Text("Engadir tarefa")
})
.navigationBarItems(trailing: EditButton())
}
}
func engadirTarefa() {
//
}
func borrarTarefa(at offsets:IndexSet) {
//Borrar elementos
}
func moverTarefa(at offsets:IndexSet, to destination: Int) {
//Mover elementos
}
}