选择单个视图控制器,该控制器将根据表视图控制器中选择的索引显示一定数量的 UITextField
Posted
技术标签:
【中文标题】选择单个视图控制器,该控制器将根据表视图控制器中选择的索引显示一定数量的 UITextField【英文标题】:Segueing to a single view controller that will display some number of UITextFields depending on index selected in table view controller 【发布时间】:2019-05-23 06:45:38 【问题描述】:在我当前的应用程序中,我有一个 UITableViewController,它允许我根据所选行选择三个不同的索引。如果我选择第一行,我会选择具有三个 UITextField 的视图控制器。如果我选择第二行,我会选择一个带有一个 UITextField 的新视图控制器。如果我选择第三行,我会转到另一个带有五个 UITextField 的新视图控制器。我正在寻找一种将视图控制器压缩到一个视图控制器中的方法,该控制器将根据表视图控制器中选择的索引动态隐藏/取消隐藏或删除/添加所需数量的 UITextField。我需要将文本字段显示在垂直堆栈视图中。
虽然它非常有价值,但我并不是在寻找某人的解决方案/示例,而是让我知道一些我可以研究的主题会非常有帮助。
感谢您的宝贵时间,
托尼
【问题讨论】:
【参考方案1】:对于这个问题可能有不同的方法,但我会在新的视图控制器中创建一个stackView
,并嵌入最大可能数量的textFields
。假设具有大多数文本字段的 VC 可以包含 3 个文本字段。用 3 textFields
在里面创建你的 stackView。
然后将 tableView 的 indexPath.row 连接到 NEW VC,它可以保存一个 Integer 变量,如:
var index: Int?
在tableView的didSelectRowAt
方法中:
performSegue(withIdentifier: "yourIdentifier", sender: indexPath.row)
在prepareForSegue
方法中:
if segue.identifier == "yourIdentifier"
let vc = segue.destination as! NEWViewController
vc.index = sender
在您的 NEW View 控制器中为您的 textField 设置标签,这样您就可以根据索引知道要删除哪个 textField。 然后在 newViewController 的 viewDidLoad 中,你可以根据 index 从 stackView 中删除 textFields (然后你可能会遇到 which ):
var counter = 0
while counter < index
answerStackView.subviews.forEach (view) in
if counter < index
if view is UITextField
if view.tag == /*something here to delete specific textFields depending on index. */
view.removeFromSuperview()
counter += 1
【讨论】:
以上是关于选择单个视图控制器,该控制器将根据表视图控制器中选择的索引显示一定数量的 UITextField的主要内容,如果未能解决你的问题,请参考以下文章