隔离到单个视图控制器,该视图控制器将显示一些UITextField,具体取决于在表视图控制器中选择的索引

时间:2018-12-23 22:51:48

标签: swift uitextfield uistackview uielement

在我当前的应用程序中,我有一个UITableViewController,它允许我根据所选的行来选择三个不同的索引。如果选择第一行,则选择带有三个UITextField的视图控制器。如果选择第二行,则选择带有一个UITextField的NEW视图控制器。如果选择第三行,则选择具有五个UITextField的另一个NEW视图控制器。我正在寻找一种方法来将要凝结的视图控制器压缩到一个视图控制器中,该视图控制器将根据在表视图控制器中选择的索引来动态隐藏/取消隐藏或删除/添加所需数量的UITextField。我需要文本字段以垂直堆栈视图显示。

尽管这将是非常有价值的,但我并不是在寻找某人的解决方案/示例,而是让我知道一些我可以研究的主题会非常有帮助。

感谢您的时间,

托尼

1 个答案:

答案 0 :(得分:0)

可能有不同的方法来解决此问题,但是我将在NEW视图控制器中创建一个stackView,其中嵌入了textFields的最大可能数目。假设具有大多数textField的VC可以包含3个textField。使用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中,您可以根据索引从stackView中删除textFields(然后您可能会遇到其中的问题):

    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
        }
    }