【问题标题】:Present Popover View Controller Swift呈现 Popover 视图控制器 Swift
【发布时间】:2015-11-18 14:51:56
【问题描述】:

当我尝试以编程方式显示弹出视图控制器时,它不起作用,我不知道为什么。我已经从网络上的多个来源复制,但似乎没有任何效果,每次显示 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)

    }

}

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

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

【问题讨论】:

    标签: ios swift ios8 ios9


    【解决方案1】:

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

    【讨论】:

    • 成功了,但我在指定一个大小以使其显示在当前视图控制器上时遇到问题,我该怎么做呢?
    • 您是否从情节提要中初始化了 addFriendsPopoverViewController?
    • 是的,我已经用包含的实例化代码更新了我的问题。它加载了弹出窗口,但尽管我设置了preferredContentSize.,但它仍显示为全屏
    【解决方案2】:

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

    在..中编写相同的代码。

    override func viewDidAppear(animated: Bool)
    
    {
        var controller = UIViewController()
        controller.view.backgroundColor = UIColor .greenColor()
        presentViewController(controller, animated: true, completion: nil)
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-09
      • 1970-01-01
      相关资源
      最近更新 更多