2015-08-25 4 views
2

Когда я пытаюсь программно отображать контроллер popover view, это не сработает, и я не знаю почему. Я скопировал из нескольких источников в Интернете, и ничего не работает, я получаю ту же самую ошибку в консоли каждый раз, показывая Warning: Attempt to present <AddFriendsPopoverViewController> on <MainPageViewController> whose view is not in the window hierarchy!. Я потерял и не могу понять, в чем проблема, спасибо заранее!Настоящий контроллер Popover View Swift

Вот мой скор код в моей viewDidLoad() функции:

let addFriendsPopoverViewController = AddFriendsPopoverViewController() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    if (PFUser.currentUser()?["numberOfFriends"])! as! NSObject == 0 { 
     print(PFUser.currentUser()?["numberOfFriends"]) 

     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let vc = storyboard.instantiateViewControllerWithIdentifier("AddFriendsPopoverViewController") as! UIViewController 

     vc.modalPresentationStyle = UIModalPresentationStyle.Popover 
     vc.preferredContentSize = CGSizeMake(50, 50) 
     let popoverMenuViewController = vc.popoverPresentationController 
     popoverMenuViewController!.permittedArrowDirections = .Any 
     popoverMenuViewController!.delegate = self 
     popoverMenuViewController!.sourceView = self.view 
     popoverMenuViewController!.sourceRect = CGRectMake(
      100, 
      100, 
      0, 
      0) 

    self.presentViewController(vc, animated: true, completion: nil) 

    } 

} 

EDIT Я понял, что для поповера работать с iPhone следующий код необходим.

func adaptivePresentationStyleForPresentationController(controller: UIPresentationController!) -> UIModalPresentationStyle { 
    // Return no adaptive presentation style, use default presentation behaviour 
    return .None 
} 

ответ

5

Ваше мнение не в иерархии представлений, пока он не был представлен, а не во viewDidLoad:

Переместить ваш код viewDidAppear:

if (PFUser.currentUser()?["numberOfFriends"])! as! NSObject == 0 { 

    addFriendsPopoverViewController.modalPresentationStyle = UIModalPresentationStyle.Popover 
    addFriendsPopoverViewController.preferredContentSize = CGSizeMake(200, 200) 
    let popoverMenuViewController = addFriendsPopoverViewController.popoverPresentationController 
    popoverMenuViewController!.permittedArrowDirections = .Any 
    popoverMenuViewController!.delegate = self 
    popoverMenuViewController!.sourceView = self.view 
    popoverMenuViewController!.sourceRect = CGRect(
     x: 50, 
     y: 50, 
     width: 1, 
     height: 1) 
    presentViewController(
     addFriendsPopoverViewController, 
     animated: true, 
     completion: nil) 

} 
+0

Это сделал трюк, но у меня возникают проблемы, обозначающей размер для того, чтобы показать вверх по настоящему вид контроллера, как бы я идти о том, что делать? – nviens

+0

Вы начали свой addFriendsPopoverViewController из раскадровки? – realtimez

+1

Да, я сделал, я обновил свой вопрос, включив код инстанцирования. Он загружает popover, но появляется полный экран, несмотря на то, что я устанавливаю 'preferredContentSize.' – nviens

1

Ваш код работает правильно, но и не может написать что существующий кодViewController в методе ViewDidLoad, потому что viewdidLoad вызывает до того времени сам контроллер сам не представил, почему он не позволяет представитьViewController.

Написать тот же код в ..

override func viewDidAppear(animated: Bool) 

{ 
    var controller = UIViewController() 
    controller.view.backgroundColor = UIColor .greenColor() 
    presentViewController(controller, animated: true, completion: nil) 

} 
Смежные вопросы