簡體   English   中英

當前Popover視圖控制器Swift

[英]Present Popover View Controller Swift

當我嘗試以編程方式顯示彈出式視圖控制器時,它將無法工作,我也不知道為什么。 我已經從Web上的多個來源復制了文件,似乎沒有任何作用,每次顯示Warning: Attempt to present <AddFriendsPopoverViewController> on <MainPageViewController> whose view is not in the window hierarchy!控制台中都會出現相同的錯誤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
}

在顯示視圖之前,您的視圖才不在視圖層次結構中,而在viewDidLoad:期間則不存在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)

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM