3

我是 swift 新手,并试图了解如何使用UIPopoverPresentationController.

我在我的应用程序中需要的是,当按下按钮时,屏幕按钮的弹出窗口将显示在屏幕的一半上,并带有一个xib文件。现在发生的事情是我设法继续使用第二个视图控制器,但不知道如何加载xib文件以及如何使弹出框成为按钮屏幕的一半。这是我的代码

import UIKit

class BaseViewController: UIViewController , UIPopoverPresentationControllerDelegate {

    @IBAction func moveToPopoverView(sender: UIButton) {
      var popoverViewController = self.storyboard?.instantiateViewControllerWithIdentifier("Popover") as! UIViewController
      popoverViewController.modalPresentationStyle = .Popover
      popoverViewController.preferredContentSize   = CGSizeMake(200, 200)

      let popoverPresentationViewController = popoverViewController.popoverPresentationController

      popoverPresentationViewController?.permittedArrowDirections = .Any
      popoverPresentationViewController?.delegate = self

      presentViewController(popoverViewController, animated: true, completion: nil)
    }

   override func viewDidLoad() {
      super.viewDidLoad()       
   }    
}
4

1 回答 1

5

实现这一点的最简单方法是通过情节提要弹出框演示文稿 segue。它将为您处理呈现的视图控制器实例化。

  1. 向将显示弹出框的按钮添加弹出框演示文稿segue。给 segue 一个标识符。这将处理将弹出框锚定到按钮:

从(titleView)按钮弹出的演示文稿segue

  1. 为呈现的视图控制器设置情节提要演示详细信息。我为 tableView 控制器(嵌入在导航控制器中)选择了Page Sheet演示文稿。

(页表)呈现视图控制器

  1. 添加prepareForSegue:sender:代码以将任何参数传递给您呈现的视图控制器。(我还没有学过 Swift ......对不起目标 C。)
    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)__unused sender {
        if ([[segue identifier] isEqualToString:@"showBIBLESelectBookChapter"]) {
            UINavigationController *navigationController = segue.destinationViewController;
            if ([navigationController.topViewController isKindOfClass:[BIBLESelectViewController 类]]) {
                BIBLESelectViewController *selectViewController = (BIBLESelectViewController *)navigationController.topViewController;
                selectViewController.initialBookChapterVerse = self.bookChapterVerse;
            }
            UIPopoverPresentationController *popoverPresentationController = navigationController.popoverPresentationController;
            popoverPresentationController.delegate = self;
        }
    }

segue 将为您完成所有实际工作,实例化、呈现和锚定弹出视图控制器。

呈现弹出视图控制器

您应该能够设置您的内容大小,以便您的弹出窗口是半屏。

于 2015-05-19T19:19:34.593 回答