从具有 id 的 UItableview 单元格中获取数据

Posted

技术标签:

【中文标题】从具有 id 的 UItableview 单元格中获取数据【英文标题】:fetching data from UItableview cell with id 【发布时间】:2017-05-10 21:12:07 【问题描述】:

我正在处理一个 UITableView 中有订单列表的项目。订单来自 JSON 格式的 API。每个 UITableview 单元格都有:

    店铺名称

    店铺地址

    客户名称

    客户地址

在 JSON 中我也有 order_id。

我在 UItableview 中获取了数据,这很好。但是,当用户单击其中一个订单时,视图应该转到订单详细信息。我通过help/order/2 之类的链接在下一个视图中获取订单详细信息,其中 2 是订单号。如何保存 order_id 并将其传递给下一个视图以发出调用请求以获取详细信息?

我将订单保存在这样的类中:

class Order 
    private var _date : String?
    private var _logo : String?
    private var _shopname : String?
    private var _shopaddress : String?
    private var _clientName : String?
    private var _ClientAddress : String?
    private var _PerferTime : String?
    private var _Cost : String?

    var date : String
        return _date!
    
    var shopname : String
        return _shopname!
    
    var shopaddress : String 
        return _shopaddress!
    
    var clientName : String 
        return _clientName!
    
    var ClientAddress : String
        return _ClientAddress!
    
    var PerferTime : String
        return _PerferTime!
    
    var Cost : String
        return _Cost!
    
    var Logo : String
        return _logo!
    

    init(shopname : String , shopaddress :String,clientName : String , ClientAddress : String, PerferTime : String , Cost : String , date:String , Logo : String) 
        self._shopname = shopname
        self._shopaddress = shopaddress
        self._clientName = clientName
        self._ClientAddress = ClientAddress
        self._PerferTime = PerferTime
        self._Cost = Cost
        self._date = date
        self._logo = Logo
    

更新

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    tableView.deselectRow(at: indexPath, animated: true)
    guard orders.count > indexPath.row else 
        print("Index out of range")
        return
    
    let order =  orders[indexPath.row]

    print(order.id)


【问题讨论】:

不相关,但请停止使用私有后备实例变量来获取只读常量。这在 Swift 中是可笑的。只需将所有变量声明为(非可选)常量(let)。并且请遵守所有变量名都应该以小写字母开头的命名约定。 你想如何构建下一个视图并完成过渡? Passing object with prepareForSegue Swift的可能重复 【参考方案1】:

您无需将数据保存在可重复使用的UITableViewCell 中。单元格只是显示数据。请改用存储在某处的[Order] 数组(例如,包含此表视图的UIViewController)。

并从这个数组中获取order_id,索引来自UITableViewDelegate方法:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

喜欢:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    tableView.deselectRow(at: indexPath, animated: true)
    guard orders.count > indexPath.row else 
        print("Index out of range")
        return
    
    let order =  orders[indexPath.row]
    if <#You want to present new VC via navigation controller#> 
        navigationController?.pushViewController(<#OrderDetailsViewController#>, animated: true)
    else
        <#Do some other presentation#>

【讨论】:

我没有将数据保存在可重用的 UITableviewCell 中。我在视图控制器中有 [Order]。我仍然不明白如何从indexPath.row 获取 order_id。我将通过执行 segue 呈现订单详细信息。 @Dmitrii 您的 JSON 响应包含带有其 ID 的订单数组。为什么 Order 模型中没有 order_id 属性? @leo0019 你能检查我更新的答案吗?当我添加这个函数时,它不会返回表上的值或任何东西。我将id保存在数组中 在将“id”属性添加到 Order 模型类之前,不会编译更新的代码。如果你这样做了,你可以在用户选择这个单元格时从数组中获取 id。并使用此 ID 显示详细信息 在 Order 模型类中!

以上是关于从具有 id 的 UItableview 单元格中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

具有调整大小的大图像的 UITableView 单元格中的初始滚动滞后?

实现 UITableView (Slave) 的动态高度,它作为子视图添加到另一个具有动态高度的 UITableView (Master) 的自定义单元格中

UITableView 单元格中重叠图像的问题

如何从uitableview单元格中删除单元格

从 collectionView 单元格中获取和更新 UITableView 单元格单击

如何从分组的 UITableView 单元格中删除边框?