我正在尝试创建一个可重用的PopUp视图控制器,该控制器包含以下内容:
它应该是这样的:
现在这就是我所做的:
现在,我不知道如何继续。
根据弹出窗口的样式(1或2个按钮等)显示/隐藏对象的想法对我来说似乎很可怕。
我认为我不能使用xibs?
我希望我可以使用故事板,因为我无法通过代码进行自动布局。
代码还有可行吗?
答案 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。