Swift 如何从UITableViewController中的静态单元格中获取文本字段?敏捷的
我的视图层次结构如下所示:Swift 如何从UITableViewController中的静态单元格中获取文本字段?敏捷的,swift,uitableview,Swift,Uitableview,我的视图层次结构如下所示: UIViewController类型的ElevethViewController 容器视图 内嵌在容器视图中的UITableViewController类型的ManagedTableEleventhViewController ManagedTableEleventhViewController包含4个静态单元格,每个单元格包含1个文本字段和一个空静态单元格 class ManagedTableEleventhViewController: UITableVie
UIViewController类型的ElevethViewController
容器视图
内嵌在容器视图中的UITableViewController类型的ManagedTableEleventhViewController ManagedTableEleventhViewController包含4个静态单元格,每个单元格包含1个文本字段和一个空静态单元格
class ManagedTableEleventhViewController: UITableViewController,UITextFieldDelegate {
var hasText:Bool!
@IBOutlet weak var fullName: UITextField!
@IBOutlet weak var flatNumber: UITextField!
@IBOutlet weak var streetAddress: UITextField!
@IBOutlet weak var phoneNumber: UITextField!
//checkValue takes ELViewController parameter so that segue can be
//performed when button is touched in EleventhViewController
func checkValue(ELViewController:EleventhViewController) {
//loop through the textfields and check if they have text
for case let textField as UITextField in viewController.view.subviews {
//print is not executed meaning loop is not performed
print("some text")
if textField.text == "" {
self.hasText = false
textField.layer.borderColor = UIColor.red.cgColor
} else {
print("true value in for loop")
self.hasText = true
performSegue(withIdentifier: "elevethToTwelveth", sender: ELViewController)
}
}//end of for loop
}
class EleventhViewController: UIViewController {
var nextButtonOutlet:UIButton!
override func viewDidLoad() {
super.viewDidLoad()
//create button programmatically
var button = UIButton(type: UIButtonType.custom) as UIButton
button = UIButton(frame: CGRect(x: 0, y: 637, width: 375, height: 50))
button.titleLabel?.textColor = UIColor.white
button.backgroundColor = UIColor(colorLiteralRed: 117/255, green: 232/255, blue: 0, alpha: 1)
button.setTitle("Next", for: .normal)
button.addTarget(self, action: #selector(EleventhViewController.nextButton), for: .touchUpInside)
self.view.addSubview(button)
self.nextButtonOutlet = button
}
func nextButton(sender: UIButton) {
//create instance of tableView
let managedTable = ManagedTableEleventhViewController()
managedTable.checkValue(viewController: self)
} //end of EleventhViewController class
首先,我可以给你一个可能让你满意的答案,并修复你的循环,但我建议不要用这种方式来改变你的文本字段。我建议在cellForRow中执行此操作,即使它们可能是静态单元格。根据单元格中的视图设置,如果文本字段直接添加到单元格中,而不是添加到另一个视图中,则会是这样
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("Testing")
for cell in tableView.visibleCells{
for sub in cell.contentView.subviews{
if sub is UITextField{
print("Textfield")
}
}
}
}
接下来,如果这是为了验证,您不应该只检查“”大小写,因为您允许“”等。如果您只想检查文本是否存在,请使用isEmpty,它应该工作得更好。 另外,您不必从子视图中提取字段,因为您已经有了属性,但我不确定您是否还有其他理由支持这种逻辑 编辑。哎呀,我刚刚注意到你在一个没有任何可见字段的控制器中检查文本字段,所以通常你的检查永远不会通过 我认为你甚至不应该在另一个类中验证一个类的文本字段,除非它是一个处理文本字段验证的类
在EleventhViewController中,您没有文本字段,因此没有要验证的内容。什么是viewController?粘贴的代码已断开。@Magnas的视图控制器为EleventhViewController。在本教程之后,我在您发布的代码中创建了视图层次结构,ManagedTableEleventhViewController类没有任何方法。这仅仅是您的“粘贴”决定,还是类中真的没有方法?@Magnas我想尽量减少粘贴的代码量,使其更具可读性。我已经用编程按钮更新了我的代码,每次触摸该按钮都会调用
func nextButton()
。@Magnas我误读了你的问题。在ManagedTableEleventhViewControlle中有func checkValue(ELViewController:EleventhViewController)
方法。现在,每次触摸NextButtoOutlet时,都会在EleventhViewController中调用checkValue方法。文本字段从对象库中拖动,并放置在tableView的静态单元格中。