在视图控制器中添加动态部件作为子视图

时间:2016-07-25 11:59:22

标签: ios swift storyboard

我正在尝试创建一个可重用的PopUp视图控制器,该控制器包含以下内容:

  • 带有图像和标签的静态部分(顶部)
  • 动态部分(下部),可以包含1个大按钮,或者2个较小的并排或2个较小的按钮。

它应该是这样的:

enter image description here

现在这就是我所做的:

  • 创建了一个PopUpViewController类
  • 在故事板中,添加了一个带有PopUpViewController类的VC
  • 添加了静态部件的插座

现在,我不知道如何继续。

根据弹出窗口的样式(1或2个按钮等)显示/隐藏对象的想法对我来说似乎很可怕。

我认为我不能使用xibs?

我希望我可以使用故事板,因为我无法通过代码进行自动布局。

代码还有可行吗?

2 个答案:

答案 0 :(得分:0)

您可以在代码中创建3个按钮。并使用if语句显示2个小按钮或大按钮。否则我想你可以在故事板中添加2个“查看”对象,在另一个上添加2个按钮,在另一个上添加1个按钮,然后使用if语句显示和隐藏你想要的“视图”。

以下是一个例子:

import UIKit

class ViewController: UIViewController {

    var flag = false
    var buttonSmallOne: UIButton!
    var buttonSmallTwo: UIButton!
    var buttonBigOne: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Create the 3 buttons
        buttonSmallOne = UIButton(frame: CGRect(x: self.view.bounds.width/2 - 50, y: self.view.bounds.height/2, width: 50, height: 50))
        buttonSmallOne.backgroundColor = .green()
        buttonSmallOne.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)

        buttonSmallTwo = UIButton(frame: CGRect(x: self.view.bounds.width/2 + 50, y: self.view.bounds.height/2, width: 50, height: 50))
        buttonSmallTwo.backgroundColor = .green()
        buttonSmallTwo.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)

        self.view.addSubview(buttonSmallOne)
        self.view.addSubview(buttonSmallTwo)

        buttonBigOne = UIButton(frame: CGRect(x: self.view.bounds.width/2-100, y: self.view.bounds.height/2, width: 100, height: 50))
        buttonBigOne.backgroundColor = .red()
        buttonBigOne.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)

        self.view.addSubview(buttonBigOne)

        buttonBigOne.isHidden = true
        buttonBigOne.isEnabled = false
    }

    func buttonAction(sender: UIButton!) {
        if flag == false {
            // Hide
            buttonSmallOne.isHidden = true
            buttonSmallOne.isEnabled = false
            buttonSmallTwo.isHidden = true
            buttonSmallTwo.isEnabled = false
            // Show
            buttonBigOne.isHidden = false
            buttonBigOne.isEnabled = true
            flag = true
        }else{
            // Show
            buttonSmallOne.isHidden = false
            buttonSmallOne.isEnabled = true
            buttonSmallTwo.isHidden = false
            buttonSmallTwo.isEnabled = true
            // Hide
            buttonBigOne.isHidden = true
            buttonBigOne.isEnabled = false
            flag = false
        }
    }
}

答案 1 :(得分:0)

我建议你为容器创建一个类(用于动态内容)。

创建一个带有堆栈视图的类(您可以根据按钮逻辑从水平更改为垂直)。 使用按钮和标签创建第三个类。

使用基于Enum配置的正确视图构造容器。 从代码创建所有内容,并在创建时将此容器子视图添加到popOver。

如果你必须支持iOS 8,你可以使用它具有可访问性(检查ios版本)。它适用于这类问题。稍后您可以重命名它并从项目中删除iOS 8代码。它与stackView具有相同的API。

https://github.com/tomvanzummeren/TZStackView