如何从Custom UITableViewCell获取值到ViewController?

时间:2016-08-05 04:17:33

标签: uitableview uibutton swift2 uitextfield

Please look at this image

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

单击Enter按钮我想查看两个textField是否为空。我该怎么做?请帮忙

2 个答案:

答案 0 :(得分:0)

在您的班级中创建一个Bool变量,您可以在其中执行按钮操作

valgrind

然后在你的表视图中dataSource方法cellForRowAtIndexPath add

var isTextFieldTextEmpty: Bool!

然后在你的(回车)按钮的IBAction中添加

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

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

答案 1 :(得分:0)

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

您需要做的是遍历单元格并确定特定单元格所持有的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
        }
    }
}

有评论解释了一切。希望这会有所帮助。