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

Posted

技术标签:

【中文标题】iOS Swift 3 最初在创建时在 tableView 中选择多行【英文标题】:iOS Swift 3 select multiple rows in tableView initially at creation 【发布时间】:2017-03-04 18:01:11 【问题描述】:

我想在我的 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 看起来像下面的 sn-p:

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
            
    

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

【问题讨论】:

您在viewDidAppear() 而不是viewDidLoad() 中进行数据获取和表视图配置是否有特定原因? 不,我只是把它放在一起。会不会是问题? 您应该移动 tableview 配置以查看确实加载。请发布您的 loadAllGroups() 方法,以便我们了解您是如何实现异步的。 我现在添加了更多的代码 sn-ps。我已将其移至 viewdidload,但这并没有改变行为。 【参考方案1】:

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

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

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

【讨论】:

非常感谢您解释差异!现在可以了。

以上是关于iOS Swift 3 最初在创建时在 tableView 中选择多行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift ios 中单击该单元格时在 UICollectionViewcell 中显示图像?

IOS swift如何在标签点击时在TableView中获取标签文本

ios 官网文档翻译—Create a Table View(swift)

“致命错误:在 Swift ios 中使用 vImageBuffer_initWithCGImage 时在展开可选值时意外发现 nil”

在创建新文件时在Swift中继承Viewcontroller

当我为类创建新实例时在 Swift 中获取 nil 值