我在一个ViewController类中有2个tableView。 在第一个tableView中,我在自定义单元格中有UITextField,它有自己的UITableViewCell类。
我在cellForRowAt
内的单元格中显示textField,但我无法将其像Outlet连接到VC并在ViewDidLoad中使用它。
我如何在VC内的单元格中使用textField Outlet?
答案 0 :(得分:1)
您无法直接连接TableCell中嵌入的任何东西的插座
按照步骤在连接插座的情况下执行代码操作
第1步 - 在ScreenSHot下面创建一个新的tableViewCell类
第2步 - 现在将创建的类分配给故事板中的TableView单元格,如下所示
步骤3 - 通过正常拖动要在单元类中连接的TF来创建Cell类中的出口的时间
输出将如下
第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;我的故事板
<强> ---&GT;模拟器输出
答案 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