当前弹出视图控制器 Swift

Present Popover View Controller Swift

当我尝试以编程方式显示弹出视图控制器时,它不起作用,我也不知道为什么。我从网络上的多个来源复制但似乎没有任何效果,每次显示 Warning: Attempt to present <AddFriendsPopoverViewController> on <MainPageViewController> whose view is not in the window hierarchy! 我都在控制台中遇到相同的错误我迷路了,似乎无法弄清楚问题是什么,谢谢前进!

这是我的 viewDidLoad() 函数中的 swift 代码:

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)

    }

}

编辑 我发现要使弹出窗口与 iPhone 一起使用,需要以下代码。

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

您的视图在呈现之前不在视图层次结构中,而不是在 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)

}

你的代码工作正常,但你不能在 ViewDidLoad 方法中编写 presentViewController 代码,因为 viewdidLoad 调用直到那个时候控制器本身它没有呈现这就是为什么它不允许 presentViewController 。

在..中写入相同的代码

override func viewDidAppear(animated: Bool)

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

}