Swift 为 UITableViewCell 分配两个值

Posted

技术标签:

【中文标题】Swift 为 UITableViewCell 分配两个值【英文标题】:Swift Assign two values to UITableViewCell 【发布时间】:2016-02-03 04:21:41 【问题描述】:

是否可以为 UITableView 中的单元格分配两个值?

我有一个结构如下的 json 文件:


   "band": [
      "Name": "The Kooks",
      "id": "1258"
  ]

我可以让标签显示在单元格中并将其传递给新的视图控制器,但是我如何也分配 id 以便我也可以传递它?

我是 swift 新手,所以请不要吃我。

编辑 1:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    
    let cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell")! as UITableViewCell
    
    cell.textLabel?.text = self.items[indexPath.row]
    
    return cell

items 是空的,所以我是这样理解的:

Alamofire.request(.GET, testurl, parameters: ["bandName": bandName])
        .responseJSON  response in
            switch response.result 
            case .Success:
                if let value = response.result.value 
                    let json = JSON(value)
                    
                    for (_,bands) in json 
                      for (_,bname) in bands 
                           let bandName = bname["Name"].stringValue
                            
                            print(bandName)
                            
                            self.items.append(bandName)
                            
                            self.tableView.reloadData()
                           
                        
                    
                    
                
            case .Failure(let error):
                print(error)
            
            
    

【问题讨论】:

请使用String(格式: "String%@%@",variables); 呃?需要解释一下吗? 您没有将其分配给单元格。您将 ID 保留在模型中,然后通过 prepareForSegue 中选定单元格的 indexPath 检索它。 你的意思是你可以在每个单元格的标签中传递名称或ID吗?请在 cellForRowAtIndexPath 和 didSelectRowAtIndexPath 中发布您的代码 @khuong291 单元格显示名称,但我想将 id 传递给新视图。 【参考方案1】:

您不应该将 bname Dictionary 中的每个值都添加到 self.items。 尝试将 bname 添加到 self.items,代码:

Alamofire.request(.GET, testurl, parameters: ["bandName": bandName])
    .responseJSON  response in
        switch response.result 
        case .Success:
            if let value = response.result.value 
                let json = JSON(value)

                for (_,bands) in json 
                  for (_,bname) in bands 

                        self.items.append(bname)

                        self.tableView.reloadData()

                    
                

            
        case .Failure(let error):
            print(error)
        


并在 cellForRowAtIndexPath 中使用它: func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

    let cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell")! as UITableViewCell
    if let dic = self.items[indexPath.row] as? NSDictionary
        if let id = dic["id"] as? String
            cell.idLabel.text = id
        
        if let name = dic["Name"] as? String
            cell.nameLabel.text = name
        
    
    return cell

【讨论】:

cell.idLabel:“UITableViewCell”类型的值没有成员“idLabel” idLabel & nameLabel 只是我的例子,你可以展示一下:cell.textLabel?.text = "(id) & (name)"【参考方案2】:

使用这些属性创建类或模型并在对象中分配值将对象保留在 NSarray 中,作为数据源使用选定的索引路径从数据源获取对象,并使用 prepareForSegue 将对象传递给新的视图控制器。

【讨论】:

不,这是 Objective-C 而不是 swift。

以上是关于Swift 为 UITableViewCell 分配两个值的主要内容,如果未能解决你的问题,请参考以下文章

Swift 为 UITableViewCell 分配两个值

FirebaseUi - Swift - 将 UITableViewCell 的值转换为自定义类

Swift 自定义 UITableViewCell 标签始终为 nil

uitableviewcell中的swift uitableview,自动布局始终高度为0

Swift 3:在 uitableviewcell 中删除重复项/将它们分组为 1

iOS Swift:删除行后 UITableViewCell 编辑设置为真