我如何知道在列表中单击了特定按钮

时间:2020-10-12 19:00:33

标签: swift swiftui

我有从核心数据填充的此列表:

    List {
      ForEach(items.filter {
        self.searchText.isEmpty ? true : $0.term!.contains(self.searchText)
      }, id: \.self) { item in
        
        Button(action: {
          selectedItem = items.firstIndex { $0 == item }!
          changeDescription()
          print(selectedItem)
          
        }) {
          
          Text(item.term!)
            .font(fontItems)
            .disabled(true)
            .foregroundColor(items[selectedItem] == item ? .black : .white)
        }

最后一行

.foregroundColor(items[selectedItem] == item ? .black : .white)

是我尝试检测是否单击了该按钮的尝试。在这种情况下,我想将字体颜色更改为黑色。

当我尝试滚动显示以下消息时,该应用程序在该行崩溃:

__boundsFail: index 18446744073709551615 beyond bounds [0 .. 605]'

我是SwiftUI的新手。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

直接存储item(只是将其类型设置为Equatable)而不是存储索引(在完整数组和过滤后的数组中有所不同),即

Button(action: {
  selectedItem = item       // << store item in selection
  changeDescription()
  print(selectedItem)
  
}) {
  
  Text(item.term!)
    .font(fontItems)
    .disabled(true)
    .foregroundColor(selectedItem == item ? .black : .white) // compare item
}