选择单个视图控制器,该控制器将根据表视图控制器中选择的索引显示一定数量的 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的主要内容,如果未能解决你的问题,请参考以下文章

视图控制器上的表视图控制器

如何识别单个视图控制器中的最后一个视图?

单个视图控制器的许多按钮

在单个视图控制器中拥有多个表视图的最佳实践

单个标签栏项目根据条件呈现不同的视图控制器?

我应该将底部工作表作为子视图添加到当前视图控制器还是推送添加了子视图的 UIWindow?