iOS Swift 3最初在创建时选择tableView中的多行

时间:2017-03-04 18:01:11

标签: ios uitableview swift3 uikit

我想在加载tableView时选择一些行。因此我在cellForRowAt中使用此代码:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "suggest", for: indexPath) as! groupViewControllerCell
    let item = self.feed!.items[indexPath.row]
    cell.title.text = item.name
    cell.setSelected(true, animated: true)
    return cell
}

问题是,它选择所有行,但仅用于眨眼。它很快被取消选择。我的viewDidAppear有以下代码:

override func viewDidAppear(_ animated: Bool) {
tableView.allowsMultipleSelectionDuringEditing = true
tableView.allowsSelection = true
self.tableView.setEditing(true, animated: false)
self.loadAllGroups()

loadAllGroups从服务器获取所有数据,然后重新加载tableView。

func loadAllGroups()
{
    if let url = URL(string: urlString) {
        self.updateGroupFeed(url, completion: { [unowned self] (feed) -> Void in
            self.feed = feed
        })
    }
}

updateGroupFeed类似于以下代码段:

func updateGroupFeed(_ url: URL, completion: @escaping (_ feed: GroupFeed?) -> Void) {

    **headers for alamofire request**

    Alamofire.request(url, method: .get, encoding: JSONEncoding.default, headers: headers)
        .responseJSON { [unowned self] response in
            guard let responseError = response.result.error else {
                let feed = GroupFeed(data: response.data!, sourceURL: url)
                OperationQueue.main.addOperation({ [unowned self] () -> Void in
                })
                completion(feed)
                return
            }
    }
}

现在我的问题是:如何正确选择细胞?我用它来缓存用户最后的选择。

1 个答案:

答案 0 :(得分:1)

您正在设置单元格的选定状态,这会影响单元格的渲染方式,但您实际上并未选择该行,因此只要表格刷新,选定的状态就会丢失。

您需要告诉tableview使用selectRowAtIndexPath选择单元格。

我不确定您是否要在cellForRowAt中执行此操作。选择完成处理程序中的单元格可能是个更好的主意。