如何使用函数选择UITableViewCell而不点击它?

时间:2017-04-19 07:11:16

标签: ios xcode uitableview swift3

我使用下面提到的数组填充我的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
   }

3 个答案:

答案 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中,因此我无法编写代码,但我解释了找到它的逻辑。希望这会有所帮助。