UIPopoverPresentationController

3
我是一个新手,正在学习如何使用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()       
   }    
}
1个回答

5
最简单的方法是通过一个storyboard popover presentation segue来实现。它会为你处理被呈现的视图控制器的实例化。
1. 在将要呈现popover的按钮上添加一个popover presentation segue,并给它一个标识符。这将处理将popover锚定到按钮: Popover presentation segue from (titleView) button 2. 设置被呈现的视图控制器的storyboard呈现细节。我选择了Page Sheet呈现方式,用于tableView控制器(嵌入在导航控制器中)。 (Page sheet) presented view controller 3. 添加prepareForSegue:sender:代码以传递任何参数给你的被呈现的视图控制器。(我还没有学习Swift...抱歉使用Objective C)
    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)__unused sender {
        if ([[segue identifier] isEqualToString:@"showBIBLESelectBookChapter"]) {
            UINavigationController *navigationController = segue.destinationViewController;
            if ([navigationController.topViewController isKindOfClass:[BIBLESelectViewController class]]) {
                BIBLESelectViewController *selectViewController = (BIBLESelectViewController *)navigationController.topViewController;
                selectViewController.initialBookChapterVerse = self.bookChapterVerse;
            }
            UIPopoverPresentationController *popoverPresentationController = navigationController.popoverPresentationController;
            popoverPresentationController.delegate = self;
        }
    }
segue会为你处理所有的实际工作,包括实例化、呈现和锚定popover视图控制器。 Presented popover view controller 你应该能够设置你的内容大小,使得你的popover是半屏幕大小。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接