如何从自定义 UITableViewCell 获取值到 ViewController?

Posted

技术标签:

【中文标题】如何从自定义 UITableViewCell 获取值到 ViewController?【英文标题】:How do I get the values from Custom UITableViewCell to ViewController? 【发布时间】:2016-08-05 04:17:33 【问题描述】:

我在 UITableViewCell 上有两个 UITextField,它们的 IBOutlets 连接在称为“CustomCell.swift”的自定义 UITableViewCell 类中。 Enter 按钮位于 ViewController 的 UIView 上,其 IBAction 位于称为“ViewController”的 UIViewController 类中。

单击 Enter 按钮时,我想查看两个文本字段是否为空。我该怎么做?请帮忙

【问题讨论】:

我可以做这样的事情吗@IBAction func enquireButton(sender: AnyObject) let cell = tableView.dequeueReusableCellWithIdentifier("Guest Details") as! GuestDetailsTableViewCell;让 fullName1 = cell.fullNameTextField.text!; 【参考方案1】:

在您有按钮操作的类中创建一个 Bool 变量

var isTextFieldTextEmpty: Bool!

然后在你的table view dataSource方法中添加cellForRowAtIndexPath

if myCell.myTextField.text?.isEmpty == true 
        self.isTextFieldTextEmpty = true
     else 
        self.isTextFieldTextEmpty = false
    

然后在您的 (Enter) 按钮的 IBAction 中添加

self.myTableView.reloadData()
self.myTableView.layoutIfNeeded()
print(self.isTextFieldTextEmpty) 

如果表格视图的所有单元格中的所有文本字段都有文本,则打印false,否则如果所有文本字段中只有一个文本字段没有文本,则打印true

【讨论】:

【参考方案2】:

这是一个简单的解决方案。它适用于任意数量的单元格。

您需要做的是遍历单元格并确定特定单元格所包含的 textField 是否为空。现在的问题是您将如何遍历单元格,是否有任何代表?答案是否定的。

您必须手动构建 indexPaths 才能从表格中获取单元格。

这是一个简单的演练。你的设置非常正确。你的 ViewController 中应该有一个 tableview。因此,tableview 的 IBOutlet 应该在那里。我将我的 TableView 命名为“myTableView”。并且 textField 的 Outlet 应该在 TableViewCell 内,这也是正确的。最后,Enter 按钮的操作方法应该在视图控制器中。

确保正确连接所有插座。

这是示例自定义 TableViewCell -

import UIKit

class CustomTableViewCell: UITableViewCell 

    @IBOutlet weak var internalTextField : UITextField!

    override func awakeFromNib() 
        super.awakeFromNib()
    


现在只需转到 ViewController.swift-

import UIKit

class ViewController: UIViewController, UITableViewDataSource  

    @IBOutlet weak var myTableView : UITableView!

    var numberOfCells = 2  //you can update it to be any number

    override func viewDidLoad() 
        super.viewDidLoad()
        self.myTableView.dataSource! = self  //assign the delegate
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
    

    func numberOfSectionsInTableView(tableView: UITableView) -> Int 
        return 1
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return numberOfCells
    

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
        let cell : CustomTableViewCell = tableView.dequeueReusableCellWithIdentifier("customCell", forIndexPath: indexPath) as! CustomTableViewCell
        return cell;
    

    @IBAction func pressedEnter()

        var row  = 0

        while row < numberOfCells  //iterate through the tableview's cells

            let indexPath : NSIndexPath = NSIndexPath(forRow: row, inSection: 0) //Create the indexpath to get the cell
            let cell : CustomTableViewCell = self.myTableView.cellForRowAtIndexPath(indexPath) as! CustomTableViewCell

            if cell.internalTextField.text!.isEmpty
                print("TextField is Cell \(row) is Empty")
            
            else
                print("TextField is Cell \(row) is NOT Empty")
            
            row += 1
        
    

有 cmets 可以解释一切。希望这会有所帮助。

【讨论】:

在 -> let cell : CustomTableViewCell = self.myTableView.cellForRowAtIndexPath(indexPath) 处获得“在展开可选值时意外发现 nil”!自定义表视图单元。有人可以帮忙解决这个错误吗?

以上是关于如何从自定义 UITableViewCell 获取值到 ViewController?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Core Data 获取请求从自定义 UITableViewCell 返回空?

如何从自定义 UITableViewCell 触发 segue - iOS7

如何从自定义 UITableViewCell 调用操作以重新加载 tableView

如何从自定义操作中进入删除确认状态 UITableViewCell?

如何执行从自定义 UITableViewCell(xib) 到另一个 ViewController 的 segue 视图

编辑完成后如何从自定义uitableviewcell的文本字段向数组添加数据