我使用下面提到的数组填充我的tableView。如果用户搜索数组并找到项目,则应选择该单元格。
(
{
barcode = 8901058847857;
image = (
);
name = "Maggi Hot Heads";
productTotal = "60.00";
quantity = 3;
},
{
barcode = 8901491101837;
image = (
);
name = "Lays Classic Salted";
productTotal = "20.00";
quantity = 1;
}
)
我使用下面提到的代码来搜索数组中的条形码,但我不知道如何继续进行,如何在其他情况下选择tableViewCell。 有一些代码写在tableViewCell setSelected。
let namePredicate = NSPredicate(format: "barcode contains[c] %@",code)
let filteredArray = orderDetailsArray.filter { namePredicate.evaluate(with: $0) }
if filteredArray.isEmpty {
let alert = UIAlertController(title: "Alert", message: "Item not found in cart.", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: { action in
self.scan()
}))
self.present(alert, animated: true, completion: nil)
}else{
print("item found")
// Need to do selection here
}
答案 0 :(得分:1)
else{
print("item found")
1. add to that object in separate array
yourMutableArr.append("scannedString") // which are scanned
recently
2. reload tableview
[yourTblView reloadData];
3. In cellForRowAtIndexPath compare that barcodes with datasource array's barcode
let strBarcode: String = dict["barcode"][indexPath.row]
if yourMutableArr.contains(strBarcode) {
//addNewItem
cell.accessoryType = .Checkmark
}
}
答案 1 :(得分:1)
我可以通过两种方式来实现你想要的目标。
//First
let filteredArray = dataArray.filter{$0["barcode"]!.contains("8901058847857")}
var tempArray = [Int]()
for dict in filteredArray{
tempArray.append(dataArray.index{$0 == dict}!)
}
//this will have the appropriate rows that you want selected based on your initial and non filtered array
print(tempArray)
现在你所要做的就是试着弄清楚如何在你的方法中使用它。 tempArray
包含要选择的符合您要求的行的索引。现在,您所要做的就是致电UITableView
' selectRowMethod
并传递您现在拥有的indexPath
行
如果你想要做的就是根据条件选择行而你没有使用 filteredArray ,那么添加符合你条件的元素是没有意义的。另一个阵列。您应该使用以下方法。
//Second approach
var index = 0
var tempArray = [Int]()
for dict in dataArray{
if (dict["barcode"]?.contains("8901058847857"))!{
//Or just select the row at this index value
tempArray.append(index)
}
index += 1
}
答案 2 :(得分:0)
如果您的tableview以顺序方式根据数组填充,则可以在else块中执行此操作:在主项中查找已过滤项的最后一个对象的索引。应该获取tableview的indexpath.row,它具有根据数组DS的单元格。您可以通过提供数组的索引并获取单元格来按cellForRowAtIndexPath
获取单元格,然后您可以转动单元格的选择并重新加载索引路径。
目前我不在我的Mac中,因此我无法编写代码,但我解释了找到它的逻辑。希望这会有所帮助。