UIPopoverController使用

 

 


1.簡介

  • 1.1 什麼是UIPopverController?
    • 是iPad開發中常見的一種控制器.
    • 跟其餘控制器不同的是,它直接繼承自NSObject,並不是繼承自UIViewController.
    • 它只佔用部分屏幕控件來呈現信息,並且顯示在屏幕的最前面.

2.使用步驟

  • 要想顯示一個UIPopverController,須要通過下列步驟:
    • 設置內容控制器
      • 因爲 UIPopverController 直接繼承自 NSObject,不具有可視化的能力.
      • 所以, UIPopverController上面的內容必須由另一個繼承自UIViewController的控制器來提供,這個控制器成爲"內容控制器".
    • 設置內容的尺寸
      • 顯示出來佔據多少屏幕空間
    • 設置內容的位置
      • 從哪一個地方冒出來

3.設置內容控制器

  • 設置內容控制器有3種方法:web

    • 1.在初始化UIPopoverController的時候傳入一個內容控制器
      • - (id)initWithContentViewController:(UIViewController *)viewController;
    • 2.@property (nonatomic, retain) UIViewController *contentViewController;ide

    • 3.- (void)setContentViewController:(UIViewController *)viewController animated:(BOOL)animated;動畫


4.設置內容的尺寸

  • 設置內容的尺寸有兩種方法:
    • @property (nonatomic) CGSize popoverContentSize;
    • - (void)setPopoverContentSize:(CGSize)size animated:(BOOL)animated;

5.設置顯示的位置

  • 設置顯示的位置有兩種方法:atom

    • 1.圍繞着一個UIBarButtonItem顯示(箭頭指定那個UIBarButtonItem)
    • (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;
    • item :圍繞着哪一個UIBarButtonItem顯示
    • arrowDirections :箭頭的方向
    • animated :是否經過動畫顯示出來url

    • 2.圍繞着某一塊特定區域顯示(箭頭指定那塊特定區域)spa

    • (void)presentPopoverFromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;3d

    • rect :指定箭頭所指區域的矩形框範圍(位置和尺寸)代理

    • view :rect參數是以view的左上角爲座標原點(0,0)code

    • arrowDirections :箭頭的方向對象

    • animated :是否經過動畫顯示出來


6.rect和view參數


7.常見報錯

  • 在popover的使用過程當中,常常會遇到這個錯誤 -[UIPopoverController dealloc] reached while popover is still visible. 錯誤的大致意思是:popover在仍舊可見的時候被銷燬了(調用了dealloc)

  • 從錯誤能夠得出的結論:

    • 當popover仍舊可見的時候,不許銷燬popover對象
    • 在銷燬popover對象以前,必定先讓popover消失(不可見)

8.經過內容控制器設置內容尺寸

  • 內容控制器能夠自行設置本身在popover中顯示的尺寸

    • 在iOS 7以前 @property (nonatomic,readwrite) CGSize contentSizeForViewInPopover;
    • 從iOS 7開始 @property (nonatomic) CGSize preferredContentSize;

9.常見屬性

  • 代理對象 @property (nonatomic, assign) id delegate;

  • 是否可見 @property (nonatomic, readonly, getter=isPopoverVisible) BOOL popoverVisible;

  • 箭頭方向 @property (nonatomic, readonly) UIPopoverArrowDirection popoverArrowDirection;

  • 關閉popover(讓popover消失)

  • (void)dismissPopoverAnimated:(BOOL)animated;


10.防止點擊UIPopoverController區域外消失

  • 默認狀況下 只要UIPopoverController顯示在屏幕上,UIPopoverController背後的全部控件默認是不能跟用戶進行正常交互的 點擊UIPopoverController區域外的控件,UIPopoverController默認會消失

  • 要想點擊UIPopoverController區域外的控件時不讓UIPopoverController消失,解決辦法是設置passthroughViews屬性 @property (nonatomic, copy) NSArray *passthroughViews; 這個屬性是設置當UIPopoverController顯示出來時,哪些控件能夠繼續跟用戶進行正常交互。這樣的話,點擊區域外的控件就不會讓UIPopoverController消失了


11.如何在iPhone中實現popover的效果

  • UIPopoverController這個類是隻能用在iPad中的.
  • 要想在iPhone中實現popover效果,必須得自定義view.
相關文章
相關標籤/搜索