Avertissement: Tentative de présenter ModalTableViewController sur MainTableViewController qui est déjà la présentation (null)
J'ai un problème avec une liste. Si je tape sur une cellule, je vais charger une liste de sélectionner plus de détails. Tout fonctionne bien, mais lorsque j'appuie sur mon cellulaire à nouveau je reçois à chaque fois le message suivant:
Avertissement: Tentative de présenter ModalTableViewController... sur MainTableViewController... ce qui est déjà présenter (null)
Si je tape sur une autre cellule, je n'obtiendrez pas cet Avertissement. Seulement si une appuyez sur la même ligne de nouveau.
J'ai essayé beaucoup de choses, mais je ne suis pas en mesure de résoudre ce problème. Je charge ma liste avec comme ceci:
var popover: UIPopoverController!
var popoverContent: ModalTableViewController!
et sur mon cellulaire, appuyez sur:
popoverContent = self.storyboard.instantiateViewControllerWithIdentifier("ModalTableViewController") as ModalTableViewController
popoverContent.selectedQuestionID = indexPath!.row
popover = UIPopoverController(contentViewController: popoverContent)
popover.delegate = self
popover.presentPopoverFromRect(currentCell.LabelCellTitle.frame, inView: currentCell.LabelCellTitle.superview, permittedArrowDirections: UIPopoverArrowDirection.Left, animated: true)
Et de rejeter
func popoverControllerDidDismissPopover(popoverController: UIPopoverController!) {
popover.dismissPopoverAnimated(false) //just to check
self.popover = nil
self.popoverContent = nil
}
Des idées?
Edit:
Si je vérifie avec:
if(self.popoverContent == nil) {
avant de l'ouvrir, je vais trouver que ce n'est pas nul quand j'appuie sur la même cellule.
Modifier à nouveau:
J'ai le même problème si je le créer avec un peu différente de l'installation:
Personnalisé 1x1px Bouton. Se connecter liste avec des enchaînements. Sur la cellule appuyez sur le bouton de coup à la cellule et ouvrir la liste.
Donc il n'y a pas de code pour l'ouverture de la liste, uniquement avec le storyboard de l'éditeur.
Je reçois le même message d'erreur (parfois) juste si je tape la même liste de nouveau.
- Vous pouvez choisir seulement l'un de l'objective-c et swift balises pour éviter de confondre les gens comme moi. 🙂
- Je pensais que quelqu'un avec un immense Obj-C Experiance devriez connaître la réponse aussi 😉
- Juste envelopper la présentation à l'intérieur:
NSOperationQueue.mainQueue().addOperationWithBlock { //Your presentation call }
est assez pour faire ce travail.
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sur swift, mais pour Objective-C, j'ai fini d'emballer la presentViewController appel à un performSelector appel.
J'ai eu ce problème parce que j'étais en train d'effectuer des enchaînements /présent de l'intérieur:
Je l'ai changé pour:
et il fixe!
Cela fonctionne aussi:
Il semble que cela est vrai de présenter quelque chose sur une liste. La raison pour laquelle toutes les réponses précédentes travail est probablement parce que les mesures sont prises qui se passe avant la liste (ou de la feuille d'activité, ou similaire) est rejetée.
Si vous le pouvez, essayez de rejeter la liste d'abord, puis la présentation de votre modal.
C'est un iOS 8 question sur iPad réalité et ne se produit pas dans iOS en dessous de 8. Vous pouvez mettre une condition là:
Mais envisager de Steve point également (https://stackoverflow.com/a/26380194/362310) ci-dessous avec ce changement de code.
Facilement ajouter ce bout de code dans
ViewDidLoad()
de votre principal uiviewcontrollerCe qui se passe si une UIActionSheet est présenté au moment de nouveau point de vue contrôleur de présentation de l'appel, par exemple
Ce code fonctionne pour moi
Pour moi, ce qui s'est passé quand j'avais deux UIBarButton éléments comme partie d'un NavigationItem et tous les deux avaient un déclenchée segue à ouvrir des vues en tant que liste - avec leurs propres contrôleurs. Une liste ne serait pas faire disparaître automatiquement lorsque vous appuyez sur l'autre BarButtonItem. Toutefois, il serait de rejeter quand j'ai puisé ailleurs en dehors de la liste.
J'ai fini primordial UINavigationController et l'ajout d'une version étendue de
presentViewController:animated:completion
Je crois que le
dispatch_async(dispatch_get_main_queue(), ^ {})
n'est pas vraiment nécessaire, j'ai juste ajouté ça par précaution.Dans mon cas, j'ai accidentellement un lien sur mon bouton pour un
IBAction
etStoryboard Segue
avec l'aimablePresent As Popover
en même temps. Ce que j'ai fait pour résoudre ce fut d'enlever mon bouton deTouch Up Inside
lien pourIBAction
et utilisé seulementStoryboard Segue
.