【问题标题】:Button in view doesn't work from view container视图中的按钮在视图容器中不起作用
【发布时间】:2018-08-08 14:40:09
【问题描述】:

我的视图控制器中有一个视图容器,它被拉伸到整个屏幕。已启用用户交互。当我在这个视图控制器中通过这个视图容器打开另一个视图时,按钮是可点击的,但没有响应。我应该怎么做才能让它发挥作用?

视图控制器:

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 教程使其工作。

【问题讨论】:

  • 请分享您的代码。
  • @Khushbu 添加了一些代码。

标签: swift uiview


【解决方案1】:

您必须替换整个ViewController,而不仅仅是View

@IBAction func switchViewAction(_ sender: UISegmentedControl) {
    self.viewContainer.bringSubview(toFront: views[sender.selectedSegmentIndex])
}

您当前的代码只是将LoginVCview 替换为RegisterVCview,而不是将LoginVC 替换为RegisterVC。当您这样做时,您将留下负责实际响应任何交互的 ViewController

您必须重新编写代码以跟踪 ViewController 而不仅仅是它们的视图。然后,当您需要更改当前视图时,不要将所有视图添加到viewContainer 并将它们移动到前面,而应该将您的子 ViewController(嵌入在容器中的 ViewController)设置为您想要显示的 ViewController (LoginVCRegisterVC)。

【讨论】: