Как разделить действия нескольких кнопок в содержимом SwiftUI ForEach? - PullRequest
1 голос
/ 01 апреля 2020

У меня есть список элементов с флажком заголовка и значком таймера:

enter image description here

Флажок - кнопка, а значок таймера - кнопка, с которой связаны уникальные действия. Тем не менее, если я коснусь где-нибудь внутри ячейки, он запускает оба действия кнопки одновременно. Предполагается, что они работают независимо друг от друга, а также от крана в ячейке. Как мне изменить следующий код, чтобы разделить действия?

List {
      ForEach(tasks, id: \.self) { task in
            HStack {

                Button(action: {
                    task.isComplete.toggle()
                    try? self.moc.save()
                    print("Done button tapped")
                }) {
                    Image(systemName: task.isComplete ? "square.fill" : "square")
                }
                .padding()

                Text(task.name ?? "Unknown Task")
                Spacer()

                Button(action: {
                    print("timer button tapped")
                }) {
                    Image("timer")
                }    
            }
        }
        .onDelete(perform: deleteTask)
    }

1 Ответ

2 голосов
/ 01 апреля 2020

Это стандартное поведение List, оно идентифицирует Button в строке и делает всю строку активной, вместо этого используйте .onTapGesture, как показано ниже

List {
      ForEach(tasks, id: \.self) { task in
            HStack {

                Image(systemName: task.isComplete ? "square.fill" : "square")
                .padding()
                .onTapGesture {
                    task.isComplete.toggle()
                    try? self.moc.save()
                    print("Done button tapped")
                }

                Text(task.name ?? "Unknown Task")
                Spacer()

                Image("timer")
                .onTapGesture {
                    print("timer button tapped")
                }    
            }
        }
        .onDelete(perform: deleteTask)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...