将customCell标签文本发送到目标视图

时间:2017-01-26 10:28:35

标签: swift uilabel custom-cell

我坚持这个问题。我正在从Firebase下载一个json文件并成功显示在TableView中。 TableView有一个带有两个标签的自定义单元格。我已经设置了从自定义单元格到Detail ViewController的segue链接。这工作正常,但现在我想获取单元格标签的文本内容并发送到目标ViewController。

我在过去这样做没有遇到任何麻烦,但是在自定义单元格中的label.text中实现它时遇到了麻烦。

我正在使用标签标签(label1和label2,虽然我可能会将其更改为标签名称)。

问题是,如何从所选行中的两个标签中获取文本内容并将其传递给DetailViewController?到目前为止我所有的尝试都失败了。我应该在以下方面做些什么:

  valueToPass = currentCell?.textLabel?.text 

以下是代码:

  struct postStruct {
  let property : String!
  let propType : String!
  }

class TableViewController: UITableViewController {

var posts = [postStruct]()

override func viewDidLoad() {
    super.viewDidLoad()

    self.tableView.delegate = self
    self.tableView.dataSource = self

    let databaseRef = FIRDatabase.database().reference()

  databaseRef.child("users").queryOrderedByKey().observe(.childAdded, with: {
        snapshot in

        let snapshotValue = snapshot.value as? NSDictionary
        let property = snapshotValue!["property"] as? String

        let propType = snapshotValue!["type"] as? String

        self.posts.insert(postStruct(property: property, propType: propType), at: 0)
        self.tableView.reloadData()
    })
  }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return posts.count
 }

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")

   let label1 = cell?.viewWithTag(1) as! UILabel
    label1.text = posts[indexPath.row].property

   let label2 = cell?.viewWithTag(2) as! UILabel
    label2.text = posts[indexPath.row].propType
  //  print(posts)
  //  cell.setcell(valueToPass.label1)
      return cell!
}

override func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

var valueToPass:String!

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {

    // Get Cell Label
    let indexPath = tableView.indexPathForSelectedRow;
    let currentCell = tableView.cellForRow(at: indexPath!) as UITableViewCell!;

   valueToPass = currentCell?.textLabel?.text 
    performSegue(withIdentifier: "detailSegue", sender: self)
       }

欢迎任何帮助,特别是代码示例。非常感谢期待

1 个答案:

答案 0 :(得分:1)

为tableCell创建一个自定义类,并在StoryBoard中附加插座。

cellForRowAt中的单元格创建变为

let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") As! MyCustomCell
cell.label1.text = posts[indexPath.row].property
cell.label2.text = posts[indexPath.row].propType

然后didSelectRowAtIndexPath变为

let indexPath = tableView.indexPathForSelectedRow
let currentCell = tableView.cellForRow(at: indexPath!) as! MyCustomCell

self.valueToPass = currentCell.label1?.text 
performSegue(withIdentifier: "detailSegue", sender: self)

准备segue时需要的最后一件事

override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
    if segue.identifier == "detailSegue" // you may have more than one segue, so you should check
    {
        let destinationController : DestinationViewControllerClass = segue.destination as! DestinationViewControllerClass
        destinationController.valueToPass = self.valueToPass
    }
}