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

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

  1. 店铺名称

  2. 店铺地址

  3. 客户名称

  4. 客户地址

在 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)。并且请遵守所有变量名都应该以小写字母开头的命名约定。
  • 你想如何构建下一个视图并完成过渡?

标签: ios json swift uitableview


【解决方案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 模型类中!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多