Swift 3:按钮在控制器上不起作用添加为子视图
Posted
技术标签:
【中文标题】Swift 3:按钮在控制器上不起作用添加为子视图【英文标题】:Swift 3: Buttons not working on controller added as subview 【发布时间】:2017-07-01 09:46:39 【问题描述】:我最近升级到 Xcode 8.0/Swift 3。
我正在添加一个控制器以将图像作为子视图选择到另一个控制器,由于某种原因,添加为子视图的控制器上的按钮不起作用。以前没问题。
代码如下:
let pickerController = DKImagePickerController()
override func viewDidLoad()
super.viewDidLoad()
pickerController.defaultSelectedAssets = self.assets
pickerController.didSelectAssets = (assets: [DKAsset]) in
print("didSelectAssets")
self.addChildViewController(pickerController)
self.view.addSubview(pickerController.view)
pickerController.didMove(toParentViewController: self)
有什么想法吗?我找到的所有答案都表明这应该可行:(
如果我只是使用
呈现pickerController,则回调 (didSelectAssets) 有效self.present(pickerController, animated: true)
【问题讨论】:
Present 方法如你所知以模态方式呈现 VC。我的印象是您的按钮周围有一些额外的视图。 我希望 isUserInteractionEnabled 是真的。 【参考方案1】:DKImagePickerController
似乎仅用于呈现作为视图控制器,而不是用于将作为 childVC 和子视图添加到当前视图。所以,因为你没有呈现它,所以它无法进行回调。
如果您想以这种方式显示它,则需要对 DKImagePickerController
本身进行一些编辑。
快速测试将DKImagePickerController.swift
中的done()
函数更改为:
open func done()
if self.presentingViewController == nil
self.didSelectAssets?(self.selectedAssets)
else
self.presentingViewController?.dismiss(animated: true, completion:
self.didSelectAssets?(self.selectedAssets)
)
将导致您的回调函数被调用:
pickerController.didSelectAssets = (assets: [DKAsset]) in
print("didSelectAssets")
但是,从那里开始,您必须自己编写代码以删除子视图、处理选择等。您可能还需要修改 DKImagePickerController
中的一些其他功能 - 我刚刚做了一个快速测试以获得回调工作。
【讨论】:
完美运行。我没想到 :) 非常感谢您如此深入地研究它!【参考方案2】:您应该检查您的选择器框架。尝试添加它 clipToBounds = true 以检查是否显示了整个视图。
【讨论】:
【参考方案3】:您可以使用 ViewWillAppear() 或 viewDidAppear() 方法代替 viewDidLoad()
override func viewDidAppear(_ animated: Bool)
super.viewDidAppear(animated)
pickerController.defaultSelectedAssets = self.assets
pickerController.didSelectAssets = (assets: [DKAsset]) in
print("didSelectAssets")
self.addChildViewController(pickerController)
self.view.addSubview(pickerController.view)
pickerController.didMove(toParentViewController: self)
【讨论】:
以上是关于Swift 3:按钮在控制器上不起作用添加为子视图的主要内容,如果未能解决你的问题,请参考以下文章
UIButton 在 UIPopoverController 中不起作用