2017-07-01 2 views
0

J'ai récemment amélioré à Xcode 8.0/Swift 3.Swift 3: Les boutons ne fonctionnent pas sur le contrôleur ajouté comme sous-vue

J'ajoute un contrôleur pour prendre des images en sous-vue à un autre contrôleur, et pour une raison quelconque les boutons sur le contrôleur ajouté comme une sous-vue ne fonctionnera pas. Ce n'était pas un problème avant.

Voici le code:

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) 
} 

Toutes les idées? Toutes les réponses que je trouve suggérer cela devrait fonctionner :(

Le rappel (didSelectAssets) travaille trouver si je viens de présenter le pickerController en utilisant

self.present(pickerController, animated: true) {} 
+0

La méthode actuelle comme vous le savez présente VC de façon modale. J'ai l'impression qu'il y a une vue supplémentaire autour de votre bouton. – siarheibrazil

+0

J'espère que isUserInteractionEnabled est vrai. – siarheibrazil

Répondre

1

Le DKImagePickerController semble être conçu uniquement pour présentant en tant que contrôleur de vue, et non pour être ajouté en tant que sous-vue enfant et sous-vue à votre vue actuelle. Ainsi, parce que vous n'avez pas présent il, il ne parvient pas à faire le rappel.

Si c'est comme cela que vous voulez l'afficher, vous devrez apporter quelques modifications à DKImagePickerController lui-même.

Un test rapide de changer la done() func dans DKImagePickerController.swift à ceci:

open func done() { 

    if self.presentingViewController == nil { 
     self.didSelectAssets?(self.selectedAssets) 
    } 
    else 
    { 

     self.presentingViewController?.dismiss(animated: true, completion: { 
      self.didSelectAssets?(self.selectedAssets) 
     }) 

    } 
} 

entraînera dans votre rappel func être appelé: cependant,

pickerController.didSelectAssets = { (assets: [DKAsset]) in 
    print("didSelectAssets") 
} 

À partir de là, vous devrez faites votre propre codage pour supprimer la sous-vue, manipuler les sélections, etc. Vous devrez peut-être aussi modifier d'autres fonctions à l'intérieur DKImagePickerController - Je viens de faire un test rapide pour que le rappel fonctionne.

+0

Fonctionne parfaitement. Je n'ai pas pensé à ça :) Merci beaucoup de l'avoir regardé si profondément! – mcfroob

-1

Vous pouvez utiliser les méthodes viewWillAppear() ou viewDidAppear() au lieu de 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) 
} 
-1

Vous devriez vérifier votre cadre de sélecteur. Essayez ajouter ClipToBounds = true pour vérifier si toute la vue est affichée.