Список SwiftUI didSelect, как в UITableView - PullRequest
0 голосов
/ 14 января 2020

У меня есть список, который показывает изображение страны, имя и телефонный код, и я хочу знать, какая страна выбрана, как в UITableView didSelectRowAt indexPath

LocaleInfo

struct LocaleInfo: Codable, Identifiable {
    let id = UUID()
    let name: String
    let dialCode: String
    let code: String

    var flag: UIImage? {
        return UIImage(named: "Countries.bundle/Images/\(code.uppercased())", in: Bundle.main, compatibleWith: nil)
    }

}

SwiftUI

List(filterLocaleInfo.filter({ $0.name.hasPrefix(search) })) { info in
            HStack(alignment: .center) {
                Image(uiImage: info.flag ?? UIImage())
                VStack(alignment: .leading) {
                    Text(info.name)
                        .font(.custom("Avenir-Medium", size: 17))

                    Text(info.dialCode)
                        .font(.custom("Avenir-Book", size: 15))
                }
            }
        }
        .onAppear { self.getLocaleData() }

1 Ответ

2 голосов
/ 14 января 2020

SwiftUI не имеет didSelectRowAt или чего-либо подобного, потому что он работает с состояниями, а не со стандартными обработчиками событий для изменений.

Вы должны определить переменную @State, которая будет отслеживать текущее выбранное значение:

@State private var selectedLocale: LocaleInfo? = nil

, затем используйте конструктор init(_:selection:rowContent):

List(filterLocaleInfo.filter({ $0.name.hasPrefix(search) }), selection: $selectedLocale) { info in
            HStack(alignment: .center) {
                Image(uiImage: info.flag ?? UIImage())
                VStack(alignment: .leading) {
                    Text(info.name)
                        .font(.custom("Avenir-Medium", size: 17))

                    Text(info.dialCode)
                        .font(.custom("Avenir-Book", size: 15))
                }
            }
        }
        .onAppear { self.getLocaleData() }

, где знак $ перед переменной означает, что вы связываете переменную @State со значением выбора списка Это означает, что переменная selectedLocale будет всегда содержать текущую выбранную локаль, и всякий раз, когда эта переменная состояния изменяется, весь вид будет пересчитываться (учитывая, что вы фактически используете эту переменную состояния где-то еще - например, в if заявление).

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