如何从 UITableViewController 中的静态单元格获取 textFields?迅速

Posted

技术标签:

【中文标题】如何从 UITableViewController 中的静态单元格获取 textFields?迅速【英文标题】:How to get textFields from static cells in UITableViewController? Swift 【发布时间】: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 方法。 【参考方案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 中没有文本字段,因此无需验证。

【讨论】:

以上是关于如何从 UITableViewController 中的静态单元格获取 textFields?迅速的主要内容,如果未能解决你的问题,请参考以下文章

如何从包含我的 UIViewController 的 UITableViewController 显示新视图?

如何将数据从 uitableviewcontroller 发送到 uitableviewcell

如何从 UITableViewController 中的静态单元格获取 textFields?迅速

如何从 Modal ViewController 重新加载父 UITableViewController 中的数据

如何从另一个 UIViewController 重新加载 UITableViewController

如何从 UIViewController 传递变量来委托 UITableViewController