视图中的按钮在视图容器中不起作用

时间:2018-08-06 06:10:53

标签: swift uiview

我的视图控制器中有一个视图容器,该容器被拉伸到整个屏幕。启用了用户交互。当我在此视图控制器中通过此视图容器打开另一个视图时,按钮是可单击的,但没有响应。我应该怎么做才能使其正常工作?

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

container view

这是另一个视图中的按钮

@IBAction func registerTapped(_ sender: UIButton) {
    print("Clicked - register")
}

我使用了Managing View Controllers教程来使其正常工作。

1 个答案:

答案 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显示(LoginVCRegisterVC)。