现在的Popover视图控制器Swift

nvi*_*ens 2 ios swift ios8 ios9

当我尝试以编程方式显示弹出视图控制器时,它将无法工作,我不知道为什么.我已经从网上的多个来源复制,似乎没有任何工作,每次显示Warning: Attempt to present <AddFriendsPopoverViewController> on <MainPageViewController> whose view is not in the window hierarchy! 我迷路了,我在控制台中得到同样的错误,似乎无法弄清问题是什么,提前感谢!

这是我的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)

    }

}
Run Code Online (Sandbox Code Playgroud)

编辑 我发现,对于使用iPhone的popover,需要以下代码.

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

rea*_*mez 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)

}
Run Code Online (Sandbox Code Playgroud)