如何从 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 中的数据