如何将多个选定的表格视图单元格数据传输到Swift中的下一个视图控制器?

时间:2016-09-14 14:38:54

标签: ios swift uitableview nsindexpath

所以我已经有了很多代码,但是我遇到了一些错误:

我的当前代码是:

func createGroupMessagesButton() {
    dismissViewControllerAnimated(true) {

        let user = self.tableView.indexPathsForSelectedRows
        self.messagesController2?.showChatLogController(user)
    }
}

上面的代码用于关闭当前视图控制器,并将所有数据传递到下一个视图的函数中。功能代码是:

func showChatLogController(user: User) {
    let chatLogController = ChatLogController(collectionViewLayout: UICollectionViewFlowLayout())
    chatLogController.user = user
    chatLogController.hidesBottomBarWhenPushed = true
    navigationController?.pushViewController(chatLogController, animated: true)

}

然后上面的函数将该数据推送到另一个控制器,该数据传递给上面的函数。

唯一的问题是,当我第一次尝试传递数据时,我收到一条错误,指出:

无法转换[NSIndexPath]类型的值?预期类型参数用户

This is a picture of the error

PS:用户是我创建的数组。

这是我的用户数组:

类用户:NSObject {

var id: String!
var fullName: String!
var email: String!
var userPhoto: String!
var homeAddress: NSArray!
var schoolOrWorkAddress: String!

}

总结一下我的问题,我无法传递多个选定的表格视图单元格的数据。

如果您想知道如何传递一个选定的单元格数据,请按以下方式进行:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if tableView.allowsMultipleSelectionDuringEditing != true {
        dismissViewControllerAnimated(true) {
            let user = self.users[indexPath.row]
            self.messagesController?.showChatLogController(user)
        }
    }

}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier(cellId, forIndexPath: indexPath) as! UserCell

    let user = users[indexPath.row]

    cell.textLabel?.text = user.fullName
    cell.detailTextLabel?.text = user.email

    if let userPhoto = user.userPhoto {

        cell.profileImageView.loadImageUsingCacheWithUrlString(userPhoto)

    }

    return cell
}

1 个答案:

答案 0 :(得分:0)

NSIndexPath是一个构造,用于获取特定部分中特定行的路径。

self.tableView.indexPathsForSelectedRows会返回所选行的列表,因此您必须循环遍历它们并使用row - 属性在完整的用户列表中查找相应的用户。另请注意,您最有可能希望传递Array User而不是仅传递一个。{/ p>

这是我头脑中的概念代码,应该引导你走向正确的方向。

func createGroupMessagesButton() {
    dismissViewControllerAnimated(true) {

        let selectedUserRows = self.tableView.indexPathsForSelectedRows
        var selectedUsers = [User]
        for let selectedUserRow in selectedUserRows {
            selectedUsers.append(self.users[selectedUserRow.row]!)
        }
        self.messagesController2?.showChatLogController(selectedUsers)
    }
}