如何将UITextField连接到UITableView?

时间:2018-02-05 23:02:41

标签: ios swift uitableview uitextfield

我在一个ViewController类中有2个tableView。 在第一个tableView中,我在自定义单元格中有UITextField,它有自己的UITableViewCell类。

我在cellForRowAt内的单元格中显示textField,但我无法将其像Outlet连接到VC并在ViewDidLoad中使用它。

我如何在VC内的单元格中使用textField Outlet?

4 个答案:

答案 0 :(得分:1)

您无法直接连接TableCell中嵌入的任何东西的插座

按照步骤在连接插座的情况下执行代码操作

第1步 - 在ScreenSHot下面创建一个新的tableViewCell类

enter image description here

第2步 - 现在将创建的类分配给故事板中的TableView单元格,如下所示

enter image description here

步骤3 - 通过正常拖动要在单元类中连接的TF来创建Cell类中的出口的时间

输出将如下

enter image description here

第4步 - 必需的编码

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CustomTableCell

        cell.fileNameLabel.text = coreClassObject.audioFileName
        cell.durationLabel.text = coreClassObject.audioDuration
        cell.uploadedStatusLabel.text = coreClassObject.audioUploadStatus

        cell.playButton.addTarget(self, action: #selector(playSoundAtSelectedIndex(sender:)), for: .touchUpInside)        
        return cell
    }

在ViewDidLoad中重新更新Access TF的答案

<强> ----&GT;我的ViewController类

import UIKit

class tableViewVC: UIViewController
{

    let staticArrayy = ["1","1","1","1","1","1","1","1","1","1"]

    @IBOutlet weak var myDemoTableView: UITableView!

    override func viewDidLoad()
    {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

        ///Set Delegates
        myDemoTableView.delegate = self
        myDemoTableView.dataSource = self

        ///Async operation
        ///To make sure cells are loaded
        DispatchQueue.main.async
            {
            ///Create a Reference TF
            let MyTf : UITextField!

            ///Get Index Path of Which TF is to be Accessed
            let indexPath = IndexPath(row: 0, section: 0)

            ///Create A new cell Reference
            let newCell = self.myDemoTableView.cellForRow(at: indexPath)! as! CustomTableViewCell

            ///Assign Cell TF to our created TF
            MyTf = newCell.cellTF

            ///Perform Changes
            MyTf.text = "Changes text"
        }

    }
}

extension tableViewVC : UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return staticArrayy.count
    }

    //Setting cells data
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell = self.myDemoTableView.dequeueReusableCell(withIdentifier: "Cell") as! CustomTableViewCell
        cell.cellTF.placeholder = staticArrayy[indexPath.row]
        return cell
    }

    //Setting height of cells
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
    {        
        return 60
    }
}

<强> ---&GT;我的细胞类

import UIKit

class CustomTableViewCell: UITableViewCell
{

    @IBOutlet weak var cellTF: UITextField!

    override func awakeFromNib()
    {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool)
    {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

<强> ----&GT;我的故事板

enter image description here

<强> ---&GT;模拟器输出

enter image description here

答案 1 :(得分:0)

首先,将TextField与ViewController连接是个坏主意。

但是如果你想,那么首先你需要检查你的表是否包含静态单元格,并且所需的单元格包含textfield。然后你可以将textField连接到viewcontroller的插座并在viewDidLoad中使用它

带有动态单元格的TableView将在viewDidLoad调用后重新加载,因此您无法在该方法中使用textfield var

答案 2 :(得分:0)

您不应该在ViewController中链接TableViewCell出口 - 您应该有一个单独的MyTableViewCell类,您可以在其中链接所有出口,例如:

class MyTableViewCell: UITableViewCell {
    // MARK: Outlets
    @IBOutlet weak var myTextField: UITextField!
}

您可以通过函数tableView:cellForRowAtIndexPath在视图控制器中引用此表视图,并且您可以处理在单元格上执行的所有操作,默认情况下,TextField。

func tableView(_ tableView: UITableView, cellForItemAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withReuseIdentifier: "myCell", for: indexPath) as! MyTableViewCell

    // Customize the cell and the TextField

    return cell
}

答案 3 :(得分:0)

将您的插座放在Cell类中,并且当您想要从vc访问它的文本时 你会做let cell = tableview.cellforrow(at indexpath) as! YourCellClass 然后轻松访问文本域

let text = cell.yourTextField.text

但是我建议你删除tableview,而不是使用scrollview,如果它的简单viewcontroller