Swift 3:按钮在添加为子视图的控制器上不起作用
Swift 3: Buttons not working on controller added as subview
我最近升级到 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)
}
有什么想法吗?我找到的所有答案都表明这应该有效:(
回调 (didSelectAssets) 工作发现如果我只是使用
呈现 pickerController
self.present(pickerController, animated: true) {}
您可以使用方法 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)
}
您应该检查您的选择器框架。尝试添加它 clipToBounds = true 以检查是否显示整个视图。
DKImagePickerController
似乎仅设计用于呈现 作为视图控制器,而不是作为子 VC 和子视图添加到当前视图。所以,因为你没有呈现它,它无法进行回调。
如果这是您想要的显示方式,您需要对 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
中的其他一些函数 - 我刚刚做了一个快速测试以使回调正常工作。
我最近升级到 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)
}
有什么想法吗?我找到的所有答案都表明这应该有效:(
回调 (didSelectAssets) 工作发现如果我只是使用
呈现 pickerControllerself.present(pickerController, animated: true) {}
您可以使用方法 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)
}
您应该检查您的选择器框架。尝试添加它 clipToBounds = true 以检查是否显示整个视图。
DKImagePickerController
似乎仅设计用于呈现 作为视图控制器,而不是作为子 VC 和子视图添加到当前视图。所以,因为你没有呈现它,它无法进行回调。
如果这是您想要的显示方式,您需要对 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
中的其他一些函数 - 我刚刚做了一个快速测试以使回调正常工作。