【问题标题】:How to get textFields from static cells in UITableViewController? Swift如何从 UITableViewController 中的静态单元格获取 textFields?迅速
【发布时间】:2017-03-03 20:26:00
【问题描述】:

我的视图层次结构如下所示:
类型为 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

【问题讨论】:

  • 什么是viewController?您粘贴的代码已损坏。
  • @Magnas 视图控制器是 EleventhViewController 。我在本教程之后创建了视图层次结构youtube.com/watch?v=zAWO9rldyUE
  • 在您发布的代码中,ManagedTableEleventhViewController 类没有任何方法。这只是你的“粘贴”决定还是课堂上真的没有方法?
  • @Magnas 我想尽量减少粘贴的代码量,使其更具可读性。我已经使用编程按钮更新了我的代码,每次触摸它都会调用func nextButton()。
  • @Magnas 我误读了你的问题。在 ManagedTableEleventhViewControlle 中有 func checkValue(ELViewController:EleventhViewController) 方法。现在,每次触摸 nextButtonOutlet 时都会在 EleventhViewController 中调用 checkValue 方法。

标签: swift uitableview


【解决方案1】:

首先我可以给你一个可能会让你满意的答案并修复你的循环,但我建议不要这样做来改变你的文本字段。我建议在 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")
            }
        }
    }
}

【讨论】:

  • 文本字段从对象库中拖拽到tableView的静态单元格中。
【解决方案2】:

只是为了跟进,如果这是为了验证,您不应该只检查“”大小写,因为您允许“”,“”等。使用 isEmpty,如果您只想检查是否存在,它应该会更好文本。 此外,您不必从子视图中提取字段,因为您已经拥有属性,但我不确定您是否有其他原因导致此逻辑。

编辑。糟糕,我刚刚注意到您在没有任何可见字段的控制器中检查文本字段,因此通常您的检查永远不会通过。

我认为您甚至不应该为另一个类中的一个类验证文本字段,除非它通常是一个处理文本字段验证的类。

在 EleventhViewController 中没有文本字段,因此无需验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 2015-06-04
    相关资源
    最近更新 更多