【问题标题】:create cell default value table view cell swift快速创建单元格默认值表视图单元格
【发布时间】:2018-06-22 10:16:54
【问题描述】:
func downloadJSON(completed: @escaping () -> ()) {
    let url = URL(string:  "my_URL_FILE")
    URLSession.shared.dataTask(with: url!) { (data, response, error) in
        if error == nil {
            do {
                self.notifications = try JSONDecoder().decode([NotificationStats].self, from: data!)
                print(self.notifications)
                DispatchQueue.main.async {
                    completed()
                }
            }catch {
                print("JSON Error")

            }
        }
    }.resume()
}

如果 JSON id 为空,我需要在我的结构中显示一些内容:

struct NotificationStats:Decodable {
    let Tipo: String
    let Destinatario: String
    let MittenteNome: String
    let MittenteCognome: String
    let DataOra: String
    let FotoBici: String
    let CoordinataX: String
    let CoordinataY: String
    let Stato: String
    let IdNotifica: String
    let IdMittente: String
    let IdDestinatario: String
    let IdBici: String
    let FotoMittente: String
}

我正在通过这个调用导入我的结构:

var notifications = [NotificationStats]()

然后我需要在我的表格视图中创建一个单元格,例如“无通知”。

我可以给我的结构一个默认值吗?

这是我创建表格视图的代码

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
        print(notifications.count)
        return notifications.count

    }
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 100
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "customCell") as! NotificheCustomTableViewCell
        let imgURL = NSURL(string: "my_url/\(notifications[indexPath.row].FotoBici)")
        if imgURL != nil{
            let data = NSData(contentsOf: (imgURL as URL?)!)
            cell.bikeImage?.image = UIImage(data: data! as Data)
        }
        cell.tipoLabel?.text = "\(notifications[indexPath.row].Tipo.capitalized)"
        cell.dataOraLabel?.text = "\(notifications[indexPath.row].DataOra)"

        let image = UIImage(named: "arrow-full.png")?.renderResizedImage(newWidth: 30)
        let imageViewNew = UIImageView(image: image)

        let imageSeen = UIImage(named: "arrow-empty.png")?.renderResizedImage(newWidth: 30)
        let imageViewSeen = UIImageView(image: imageSeen)

        if (notifications[indexPath.row].Stato == "nuova"){
            cell.accessoryView = imageViewNew
        }else{
            cell.accessoryView = imageViewSeen

        }
        cell.cellView.layer.cornerRadius = 10

        return cell
    }

我想了解如何处理 catch 现在打印“jsonerror”的事实。 我想创建一个显示文本规则的单元格,以防程序输入捕获“没有通知您”。

【问题讨论】:

  • 不相关:不要使用NSData(contentsOf: (imgURL as URL?)!),这是同步的,因为它是在主线程中完成的,所以会阻塞你的整个应用程序。
  • 我可以使用哪个调用来替代这个 NSData(contentsOf: (imgURL as URL?)!)
  • 添加一个额外的属性或协议来知道类型怎么样(错误,没有通知),在cellForRowAt:,检查do `let notification: NotificationStats = notifications[indexPath.row],并切换该类型的案例。
  • 你能准确地发布你的代码吗?

标签: json swift uitableview


【解决方案1】:

喜欢:

func tableView(tableView: UITableView, footerForHeaderInSection section: Int) -> CGFloat {
    if notifications.count > 0 {
        return 0
    } else {
        return hightOfView
    }
}
func tableView(tableView: UITableView, viewForfooterInSection section: Int) -> UIView?{
    MakeViewForDisplayNoNotification()
}

【讨论】:

    【解决方案2】:

    您可以使用扩展在 tableView 中显示默认视图。

    extension UITableView {
    
        func setEmptyMessage(_ message: String, backgroundColor: UIColor, textColor: UIColor) {
            let messageLabel = UILabel(frame: CGRect(x: 0, y: 0, width: self.bounds.size.width, height: self.bounds.size.height))
            messageLabel.text = message
            messageLabel.textColor = textColor
            messageLabel.numberOfLines = 0
            messageLabel.textAlignment = .center
            messageLabel.font = UIFont(name: "TrebuchetMS", size: 15)
            messageLabel.sizeToFit()
    
            self.backgroundView = messageLabel
            self.backgroundView?.backgroundColor = backgroundColor
            self.separatorStyle = .none
        }
    
        func restore() {
            self.backgroundView = nil
            self.separatorStyle = .singleLine
        }
    }
    

    将以下内容添加到您的 numberOfRowsInSection 方法中。

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if notifications.count == 0 {
            self.yourTableView.setEmptyMessage("There is no notifications to display.", backgroundColor: UIColor.clear, textColor: UIColor.lightGray)
        } else {
            self.yourTableView.restore()
        }
        return notifications.count
    }
    

    【讨论】:

      猜你喜欢
      • 2014-08-01
      • 1970-01-01
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多