滚动视图中的 UIViews 按钮未触发 IBAction
Posted
技术标签:
【中文标题】滚动视图中的 UIViews 按钮未触发 IBAction【英文标题】:UIViews buttons inside a scrollview not triggering IBAction 【发布时间】:2016-03-19 22:45:00 【问题描述】:我有一个启用分页的水平滚动视图,因此每个页面都会显示一个不同的 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 作为子视图,因为它给出了错误。
任何帮助表示赞赏,
【问题讨论】:
filesOwner
是什么?
fileOwner 是同一个 xib 类,我更新了问题以表明这一点,谢谢。
我认为你的问题是你将CarView
放在一个局部变量中,所以它会在 e 函数退出时被释放。尝试将其放入实例变量/属性中
哇,这正是问题所在!我在 viewDidLoad() 中声明了 carView 当我在类中声明它时问题解决了。非常感谢你 :) 你应该把它作为一个答案,这样我才能接受它。
【参考方案1】:
问题是您将carView
声明为局部变量,因此一旦函数退出,它将被释放,因为没有任何东西可以保存强引用。视图元素本身被滚动视图引用,因此它们不会被释放,但将不再有视图控制器实例来处理事件。
如果您将 carView
和 clockView
更改为属性,则将保留一个强引用。
【讨论】:
【参考方案2】:问题似乎是您在 ViewControllers 中使用 ViewControllers。如果您想通过情节提要执行此操作,则必须使用 containerView 并使用它附带的 embed segue 将 ViewController 放置在此 containerView 中。
如果您想以编程方式执行此操作,则必须将子视图控制器添加到包含您拥有的这些子视图控制器(即 carView 和 clockView)的父视图控制器中。
附:您调用视图控制器carView
有点令人困惑,也许CarViewController
不那么令人困惑:)
【讨论】:
谢谢您,很抱歉给您带来了困惑。你是对的,我不能在另一个 UIViewController 中使用 UIViewController,它给了我一个错误,所以我没有在 xib 中使用 UIViewController,我只使用 UIView。以上是关于滚动视图中的 UIViews 按钮未触发 IBAction的主要内容,如果未能解决你的问题,请参考以下文章