SwiftUI - несколько кнопок в строке списка - PullRequest
5 голосов
/ 12 июня 2019

Скажите, у меня есть List и две кнопки в одном ряду, как определить, какая кнопка нажата без выделения всей строки?

Для этого примера кода, когда любая из кнопок в строкепри нажатии обеих кнопок обратного вызова действия.

// a simple list with just one row
List {

    // both buttons in a HStack so that they appear in a single row
    HStack {
        Button(action: {
            print("button 1 tapped")
        }) {
            Text("One")
        }

        Button(action: {
            print("button 2 tapped")
        }) {
            Text("Two")
        }
    }
}

// when tapping just once on either button:
// "button 1 tapped"
// "button 2 tapped"

Ответы [ 3 ]

4 голосов
/ 12 июня 2019

Кажется, что это специфическая проблема, касающаяся Button, если она содержится в строке List.

Обходной путь :

List {
  HStack {
    Text("One").tapAction { print("One") }
    Text("Two").tapAction { print("Two") }
  }
}

Это дает желаемый результат.

Вы также можете использовать Group вместо Text, чтобы создать изощренный дизайн для "кнопок".

1 голос
/ 20 июня 2019

Одним из отличий SwiftUI является то, что вы не создаете конкретные экземпляры, например UIButton, поскольку вы можете быть в приложении Mac.С SwiftUI вы запрашиваете тип кнопки.

В этом случае, так как вы находитесь в строке списка, система дает вам полный размер, нажмите в любом месте, чтобы вызвать действие, кнопка.И так как вы добавили два из них, оба срабатывают, когда вы нажимаете в любом месте.

Вы можете добавить два отдельных просмотра и дать им .tapAction, чтобы они действовали как кнопки, но вы потеряетенажмите вспышку строки ячейки и любые другие автоматические кнопки, подобные функциям, которые предоставит SwiftUI.

List {
    HStack {
        Text("One").tapAction {
            print("Button 1 tapped")
        }

        Spacer()

        Text("Two").tapAction {
            print("Button 2 tapped")
        }
    }
}
0 голосов
/ 12 июня 2019

SwiftUI все еще находится в бета-версии.Вы должны сообщить об этом через помощника обратной связи: http://feedbackassistant.apple.com/

Скорее всего, ошибка в их системе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...