I have a problem with a popover. If I tap on a cell I will load a popover to select more details. Everything works fine, but when I press my cell again I receive every time the following message:
Warning: Attempt to present ModalTableViewController... on MainTableViewController... which is already presenting (null)
If I tap on another cell I will not get this Warning. Only if a tap the same row again.
I tried lots of things but I am not able to solve this problem. I load my popover with like this:
var popover: UIPopoverController!
var popoverContent: ModalTableViewController!
and on my cell tap:
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)
And to dismiss
func popoverControllerDidDismissPopover(popoverController: UIPopoverController!) {
popover.dismissPopoverAnimated(false) // just to check
self.popover = nil
self.popoverContent = nil
}
Any ideas?
Edit:
If I check with:
if(self.popoverContent == nil) {
before opening it, I'll find out that it's not nil when I tap the same cell again.
Edit again:
I have the same problem if I create it with a little different setup:
Custom 1x1px Button. Connect popover with segue. On cell tap move button to cell and open popover.
So there is no code for opening the popover, only with storyboard editor.
I get the same error message (sometimes) just if I tap the same popover again.
I had this issue because I was trying to perform segue / present from within:
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
I changed it to:
- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
and it fixed it!
I'm not on swift yet, but for Objective-C, I ended up wrapping the presentViewController call in a performSelector call.
-(void) present
{
[self performSelector: @selector(ShowModalTableViewController) withObject: nil afterDelay: 0];
}
-(void) ShowModalTableViewController
{
[self presentViewController: ctrlModalTableViewController animated: true completion: nil];
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With