如果 Swift 3/Xcode 8 中的“活动”列是“否”,如何隐藏单元格

Posted

技术标签:

【中文标题】如果 Swift 3/Xcode 8 中的“活动”列是“否”,如何隐藏单元格【英文标题】:How to hide cell if "active" column is "no" in Swift 3/Xcode 8 【发布时间】:2017-01-28 22:38:25 【问题描述】:

我正在将原型应用程序放在 Swift 3.0 中。

此时,所有 API 信息都被解析到表格单元格中。我希望做的是介绍一个工具,如果我将数据库中的“活动”列设置为“否”,那么如何防止该单元格显示在表格视图中?

目前的代码是这样的:

func configure(offence: Offence) 
   if let name = offence.name, let act = offence.act 
       self.textLabel?.text = name
       self.detailTextLabel?.text = act
   

我尝试过使用 if/else 语句,但运气不佳。

【问题讨论】:

你能再显示一些代码吗?你有一个Offence 对象数组,用作tableview 的数据源? 【参考方案1】:

如果您的Offences 有一个active 属性,您可以使用它来过滤您的服务器响应,并且只显示那些将active 属性设置为true 的响应。像这样:

struct Offence 
    var name: String
    var active: Bool


class YourViewController: UITableViewController 
    // all the offences you get from the server
    let offences: [Offence] = []

    // only the active offences - use those as your datasource!
    var visibleOffences: [Offence] 
        return offences.filter  $0.active 
    

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return visibleOffences.count
    

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCell(withIdentifier: "YourCell", for: indexPath)
        cell.textLabel?.text = visibleOffences[indexPath.row].name
        return cell
    


【讨论】:

您最好在offences 上使用didSet 观察者将visibleOffences 设置一次,以避免在每次调用visibleOffences 时对其进行过滤 或在 YourViewController 中保持登录不变,在设置攻击时使用过滤器:myViewController.offences = myOriginalOffencesFromDatabase.filter$0.active @muescha:还有其他方法,是的!

以上是关于如果 Swift 3/Xcode 8 中的“活动”列是“否”,如何隐藏单元格的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3、Xcode 8 中的 UINavigationController

swift 3 Xcode 8 中的 NSManagedObject 和 CoreData

无法正确地自动调整自动布局和堆栈视图(Swift 3、Xcode 8)

尝试呈现其视图不在窗口层次结构中的 UIAlertController (Swift 3/Xcode 8)

iOS 10 / Swift 3.0 / XCode 8 总结

Swift 3 / Xcode 8 - CNContact [访问] <私人>