如何将单元格标签的值从 tableView 传递到其他 View?

Posted

技术标签:

【中文标题】如何将单元格标签的值从 tableView 传递到其他 View?【英文标题】:How to pass cell label's value from tableView to other View? 【发布时间】:2015-08-06 16:19:40 【问题描述】:

我是ios编程的初学者,并且是整体编程的。

(我有 XCODE 6.4)

我已经阅读了很多教程,但我没有找到我需要的信息。

我有一个为标签赋值的代码:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

    let identifier = "formuleTableViewCell"

    let cell = tableView.dequeueReusableCellWithIdentifier(identifier, forIndexPath: indexPath) as! formule



    let formuleCommand = formulesList[indexPath.row]

    // Configure the cell...

    var shortCut = formuleCommand.formuleText

    cell.formuleLabel.text = shortCut



    return cell

然后,我有一个代码,它必须得到标签的名称(我想是的)

var valueToPass:String!

func tablView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) 
    println("You selected cell #\(indexPath.row)!")

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

    let identifier = "formuleTableViewCell"

    let cell = tableView.dequeueReusableCellWithIdentifier(identifier, forIndexPath: indexPath!) as! formule

    valueToPass = cell.formuleLabel.text
    performSegueWithIdentifier("detail", sender: self)



最后是代码,它将数据从标签传递到另一个 ViewController

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 

    if (segue.identifier == "detail") 

        // initialize new view controller and cast it as your view controller
       var viewController = segue.destinationViewController as! specialitiesViewController
        // your new view controller should have property that will store passed value
        viewController.passedValue = valueToPass



    


它必须这样工作: 表格视图获取单元格的数据(这里没有代码) 然后,名为 TablView 的方法必须获取单元格的标签。 最后,我单击单元格并移动到另一个 ViewController,其中我的单元格标签数据打印在另一个标签中。

但它不起作用,当我单击单元格时,我移动到 ViewController 并且 Label 中的文本等于 nil(我看不到任何文本)。为什么会这样?帮我解决这个问题!

感谢您的所有建议!

【问题讨论】:

你设置过标签吗?在您的prepareForSegue 中,您在目标控制器中设置passedValue。但是,您将需要在目标控制器中的某处 (viewDidLoad) 中将标签的文本设置为 self.passedValue? 是的,我已经在 ViewDidLoad() 方法中设置了这个,并通过添加 print(passedValue) 来确认自己,但变量仍然包含 nil 【参考方案1】:

您的问题是您正在使用函数dequeueReusableCellWithIdentifier 获取单元格,并且此方法仅在已标记为可以重用的单元格时返回一个单元格。

您需要使用与委托方法不同的cellForRowAtIndexPath,小心获取单元格,更改您的didSelectRowAtIndexPath,如下所示:

func tablView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) 
   println("You selected cell #\(indexPath.row)!")

   // get cell label
   let cell = tableView.cellForRowAtIndexPath(indexPath) as! formule

   self.valueToPass = cell.formuleLabel.text
   self.performSegueWithIdentifier("detail", sender: self)

希望对你有所帮助。

【讨论】:

以上是关于如何将单元格标签的值从 tableView 传递到其他 View?的主要内容,如果未能解决你的问题,请参考以下文章

如何将值从 tableview 传递到 collectionview

将值从表视图控制器传递到视图控制器

如何将 NsDictionary 值从 tableview 传递到下一个视图

将indexpath标签传递给tableview原型单元格内的按钮

如何将 Buttons 、标签等内容添加到展开的 tableView 单元格?

需要将值从我的 tableView 传递到另一个视图上的标签?