【问题标题】:Add a dynamic part as subview in a view controller在视图控制器中添加动态部分作为子视图
【发布时间】:2016-07-25 20:47:56
【问题描述】:

我正在尝试制作一个可重用的 PopUp 视图控制器,由以下内容组成:

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

应该是这样的:

现在这是我所做的:

  • 创建了一个 PopUpViewController 类
  • 在故事板中,添加了一个带有 PopUpViewController 类的 VC
  • 为静态部分添加了出口

现在,我不知道该怎么做。

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

我不认为我可以使用 xibs 吗?

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

代码仍然是要走的路吗?

【问题讨论】:

  • 你的意思是你想根据条件隐藏/显示动态部分......

标签: ios swift storyboard


【解决方案1】:

您可以在代码中创建 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
        }
    }
}

【讨论】:

    【解决方案2】:

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

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

    根据 Enum 配置构建具有正确视图的容器。 从代码创建所有内容,并在创建时将此容器子视图添加到您的 popOver。

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

    https://github.com/tomvanzummeren/TZStackView

    【讨论】:

    • 感谢您的回答,我忘了说我必须兼容 iOS 8,所以没有堆栈视图
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多