iPad開發中UIPopoverController的使用

什麼是UIPopoverControllerios

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

 

使用步驟app

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

  1.設置內容控制器動畫

  • 設置內容控制器有3種方法
  • 在初始化UIPopoverController的時候傳入一個內容控制器

  - (id)initWithContentViewController:(UIViewController *)viewController;atom

  • @property (nonatomic, retain) UIViewController *contentViewController;
  • - (void)setContentViewController:(UIViewController *)viewController animated:(BOOL)animated;

以上方法和屬性都是UIPopoverController的spa

  2.設置內容的尺寸代理

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

  3.設置顯示的位置code

  • 設置顯示的位置有2種方法
  • 圍繞着一個UIBarButtonItem顯示(箭頭指定那個UIBarButtonItem)

- (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;對象

  • item :圍繞着哪一個UIBarButtonItem顯示
  • arrowDirections :箭頭的方向
  • animated :是否經過動畫顯示出來

  

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

- (void)presentPopoverFromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;繼承

  • rect :指定箭頭所指區域的矩形框範圍(位置和尺寸)
  • view :rect參數是以view的左上角爲座標原點(0,0)
  • arrowDirections :箭頭的方向
  • animated :是否經過動畫顯示出來

常見報錯開發

  • 在popover的使用過程當中,常常會遇到這個錯誤

-[UIPopoverController dealloc] reached while popover is still visible.

  • 錯誤的大致意思是:popover在仍舊可見的時候被銷燬了(調用了dealloc)
  • 從錯誤能夠得出的結論
  • 當popover仍舊可見的時候,不許銷燬popover對象
  • 在銷燬popover對象以前,必定先讓popover消失(不可見)

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

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

@property (nonatomic,readwrite) CGSize contentSizeForViewInPopover;

  • 從iOS 7開始

@property (nonatomic) CGSize preferredContentSize;

以上屬性都是UIViewController的

經常使用屬性

  • 代理對象

@property (nonatomic, assign) id <UIPopoverControllerDelegate> delegate;

  • 是否可見

@property (nonatomic, readonly, getter=isPopoverVisible) BOOL popoverVisible;

  • 箭頭方向

@property (nonatomic, readonly) UIPopoverArrowDirection popoverArrowDirection;

  • 關閉popover(讓popover消失)

- (void)dismissPopoverAnimated:(BOOL)animated;

防止點擊UIPopoverController區域外消失

  • 默認狀況下
  • 只要UIPopoverController顯示在屏幕上,UIPopoverController背後的全部控件默認是不能跟用戶進行正常交互的
  • 點擊UIPopoverController區域外的控件,UIPopoverController默認會消失
  • 要想點擊UIPopoverController區域外的控件時不讓UIPopoverController消失,解決辦法是設置passthroughViews屬性

@property (nonatomic, copy) NSArray *passthroughViews;

  • 這個屬性是設置當UIPopoverController顯示出來時,哪些控件能夠繼續跟用戶進行正常交互。這樣的話,點擊區域外的控件就不會讓UIPopoverController消失了

如何iPhone中實現popover的效果

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