我的视图层次结构如下所示:
UIViewController类型的ElevethViewController
集装箱视图
嵌入在容器视图中的UITableViewController类型的ManagedTableEleventhViewController
ManagedTableEleventhViewController包含4个静态单元格,每个单元格包含1个textField和一个空静态单元格。
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
答案 0 :(得分:3)
首先,我可以给你一个可能满足你的答案并修复你的循环,但我建议不要这样做来改变你的文本域。我建议在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")
}
}
}
}
答案 1 :(得分:1)
只是为了跟进,如果要进行验证,您应该只检查""因为你允许" "," "使用isEmpty,它应该更好,如果你只想检查文本的存在。 此外,您不必从子视图中提取字段,因为您已经拥有属性,但我不确定您是否有任何其他原因可用于此逻辑。
编辑。哎呀,我刚注意到你在一个没有任何可见字段的控制器中检查文本字段,所以通常你的检查不会通过。
我认为你甚至应该为另一个类中的一个类验证文本字段,除非它是一个处理文本字段验证的类。
在EleventhViewController中,您没有文本字段,因此无需验证。