使用两个自定义单元格中的两个数组填充tableView Swift 3

时间:2018-02-07 17:30:12

标签: swift uitableview

我没有找到一种方法来填充我的tableView而不使用像Periscope这样的部分在其应用程序中直播(我想他们确实喜欢这样)。 我有两个数组:一个用于评论,另一个用于加入房间的用户。

我想在下面的照片中看到与Periscope应用相同的结果:

enter image description here

你可以在这张照片中看到第一个单元格用于评论,第二个单元格用于刚进入房间的人(estlà=加入),Bruninette是她的昵称。

enter image description here

然后你可以看到其他一些用户评论这个现场和Bruninette加入的单元格上升到可见的第一个单元格

我认为Periscope使用2个数组,它们在tableView中混合使用。 有人可以帮我,我怎么能做同样的事情。 非常感谢你。

我的代码:

@IBOutlet weak var tableView: UITableView!
var socket: SocketIOClient!
var comments: [Comment] = []
var joinerArray: [Joiner] = []

override func viewDidLoad() {
    super.viewDidLoad()
    socket.on("comment") {[weak self] data ,ack in
        let comment = Comment(dict: data[0] as! [String: AnyObject])
        self?.comments.append(comment)
        self?.tableView.reloadData()
    }

    socket.on("joiner") {[weak self] data ,ack in
        let joiner = Joiner(dict: data[0] as! [String: AnyObject])
        self?.joinerArray.append(joiner)
        self?.tableView.reloadData()
    }
}

override func viewWillAppear(_ animated: Bool) {
    self.socket.emit("joiner", [
        "roomKey": self.room.key,
        "name": Auth.auth().currentUser?.displayName])
}

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if string == "\n" {
        textField.resignFirstResponder()
        if let text = textField.text , text != "" {
                    self.socket.emit("comment", [
                        "roomKey": self.room.key,
                        "text": text,
                        "name": Auth.auth().currentUser?.displayName,
                        "photo": userImg])
                }
        textField.text = ""
        return false
    }
    return true
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return comments.count + joinerArray.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if indexPath.row < comments.count {
        let cell = tableView.dequeueReusableCell(withIdentifier: "commentCell", for: indexPath) as! CommentaireTableViewCell
        cell.comment = comments[(indexPath as NSIndexPath).row]

        cell.contentView.layer.cornerRadius = 3
        cell.layer.backgroundColor = UIColor.clear.cgColor
        return cell
    } else {
        let cell = tableView.dequeueReusableCell(withIdentifier: "joinCell", for: indexPath) as! JoinTableViewCell
        let index = indexPath.row - comments.count
        cell.joiner = joinerArray[index]
        return cell
    }
}

1 个答案:

答案 0 :(得分:1)

对评论和房间入口使用单个数组。并使用具有不同标识符的不同单元格。并且在tableview的cellforrow数据源方法中检查数据类型并使用相应的cellidentifier来获取适当的单元格。