我有一个启用了分页的水平滚动视图,因此每个页面都会显示一个不同的xib视图。某些xib视图中包含链接到IBAction的按钮。我在每个xib的类中声明了IBAction。一切看起来都很好,按钮显示点击效果和所有,但IBAction没有被解雇? 这是一个代码示例:
let clockView: ClockViewController = ClockViewController(nibName: "ClockViewController", bundle: nil)
let carView: CarViewController = CarViewController(nibName: "CarViewController", bundle: nil)
scrollview.addSubview(clockView.view)
carView.view.frame.origin.x = self.view.frame.width
scrollview.addSubview(carView.view)
clockView和carView都有按钮,按钮分别链接到ClockViewController.swift和CarViewController.swift中声明的IBActions。
这里的一个视图是怎样的。我没有在xib中添加UIViewController,我只使用了UIView。我猜这可能是问题的一部分,但我不能使用UIViewController作为子视图,因为它给出了一个错误。
答案 0 :(得分:1)
问题在于您将carView
声明为局部变量,因此一旦函数退出就会释放它,因为没有任何东西可以保存强引用。视图元素本身由scrollview引用,因此它们不会被释放,但不再是视图控制器实例来处理事件。
如果您将carView
和clockView
更改为属性,则会保留强引用。
答案 1 :(得分:0)
问题似乎是您在ViewControllers中使用ViewControllers。如果您想通过storyboard执行此操作,则必须使用containerView并使用随附的embed segue将ViewController放置在此containerView中。
如果您想以编程方式执行此操作,则必须将子视图控制器添加到父视图控制器中,该视图控制器包含您拥有的carView和clockView的子视图控制器。
P.S。你调用视图控制器carView
有点令人困惑,或许CarViewController
不那么令人困惑:)