从具有 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) 的自定义单元格中