我的视图控制器中有一个视图容器,该容器被拉伸到整个屏幕。启用了用户交互。当我在此视图控制器中通过此视图容器打开另一个视图时,按钮是可单击的,但没有响应。我应该怎么做才能使其正常工作?
ViewController:
class ViewController: UIViewController {
@IBOutlet weak var viewContainer: UIView!
var views: [UIView]!
override func viewDidLoad() {
super.viewDidLoad()
views = [UIView]()
views.append(LoginVC().view)
views.append(RegisterVC().view)
for v in views{
viewContainer.addSubview(v)
}
viewContainer.bringSubview(toFront: views[1])
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func switchViewAction(_ sender: UISegmentedControl) {
print("clicked - segment")
self.viewContainer.bringSubview(toFront: views[sender.selectedSegmentIndex])
}
这是另一个视图中的按钮
@IBAction func registerTapped(_ sender: UIButton) {
print("Clicked - register")
}
我使用了Managing View Controllers教程来使其正常工作。
答案 0 :(得分:1)
您必须替换整个ViewController
,而不仅仅是View
。
@IBAction func switchViewAction(_ sender: UISegmentedControl) {
self.viewContainer.bringSubview(toFront: views[sender.selectedSegmentIndex])
}
您当前的代码只是将LoginVC
的视图替换为RegisterVC
的视图,而不是将LoginVC
替换为RegisterVC
。完成此操作后,您将离开ViewController
来负责实际响应任何互动。
您将需要重新编写代码以跟踪ViewController,而不仅仅是它们的视图。然后,不要在需要更改当前视图时将所有视图添加到viewContainer
并将其移到最前面,而应将子ViewController(容器中嵌入的ViewController)设置为所需的ViewController显示(LoginVC
或RegisterVC
)。