首页 > 代码库 > 【iOS开源代码】(4):FPPopover

【iOS开源代码】(4):FPPopover


原文:https://github.com/50pixels/FPPopover

 

这个框架完全可用于取代苹果的 UIPoverController,因为它不仅支持 iPad,还支持 iPhone。此外,你还可以在 iPhone 中定制它的外观和样式。

本项目原本是 Mobiloud 上的一个开源组件,在我意识到它的价值之后,我决定继续跟进这个项目。欢迎你给我留言或者通过 pull request 共享你的代码。

 

功能

  • 类似 UIPopoverController 。
  • 同时支持 iPhone 和 iPad。
  • 不使用任何图片, 完全用 Quartz 编写。
  • 可定制外观 (颜色, 大小)。
  • 自动调整弹出方向(箭头方向)。不管任何情况它都会自动找出最佳方向和大小。
  • 可以不显示箭头。
  • 可以不显示边框。
  • 使用 MIT 许可协议(可用于商业用途,可修改和重新发布)
  • 支持 ARC (看这里)。

使用前准备

要使用 FPPopoverControler,你需要以下文件:

  • FPPopoverController.m 和 .h (控制器)
  • FPPopoverView.m 和 .h
  • FPTouchView.m 和 .m
  • ARCMacros.h

用法

简单例子:

-(IBAction)buttonClicked:(UIButton*)okButton {

     //the view controller youwant to present as popover

     YourViewController*controller = [[YourViewController alloc] init];

     //our popover

     FPPopoverController*popover = [[FPPopoverController alloc] initWithViewController:controller];

     //the popover will bepresented from the okButton view

     [popoverpresentPopoverFromView:okButton];

     //no release (ARC enable)

     //[controller release];

}

以上代码将显示一个黑色的 popover ,箭头方向会自动调整,content 尺寸为 200*300,而且未使用委托。

YourViewController 对象的 title 将作为 popover 的title。

指定大小

默认的 content size 为200x300。但你可以设置它:

popover.contentSize = CGSizeMake(150,200);

 

content 属性指定最大尺寸,实际显示的尺寸根据屏幕布局进行优化(例如根据横屏或竖屏模式调整)。

指定颜色

  • FPPopoverBlackTint (default)
  • FPPopoverLightGrayTint
  • FPPopoverGreenTint
  • FPPopoverRedTint

popover.tint = FPPopoverRedTint;

如果需要更多的颜色请和我联系。

强制指定箭头方向

arrowDirection 属性可以强制指定箭头方向:

popover.arrowDirection = FPPopoverArrowDirectionUp;

不显示箭头

不显示箭头使用代码:

popover.arrowDirection = FPPopoverNoArrow;

不显示标题

 //the view controller you wantto present as popover

 YourViewController *controller= [[YourViewController alloc] init];

 controller.title = nil;


不显示边框

popover.border = NO;

popover.tint = FPPopoverWhiteTint;

 

透明

通过 alpha 属性改变透明度:

popover.alpha = 0.8;

 

委托消息

首先设置 delegate 属性:

  YourViewController *controller= [[YourViewController alloc] init];

  FPPopoverController *popover =[[FPPopoverController alloc] initWithViewController:controller];

  popover.delegate = controller;

 ....

当 popover 被显示时

- (void)presentedNewPopoverController:(FPPopoverController*)newPopoverController           shouldDismissVisiblePopover:(FPPopoverController*)visiblePopoverController;

当有新的 popover 呈现时调用这个方法。如果想解散老的 popover(释放),在这个方法中发送 dismiss 消息。

- (void)presentedNewPopoverController:(FPPopoverController*)newPopoverController           shouldDismissVisiblePopover:(FPPopoverController*)visiblePopoverController{

     [visiblePopoverControllerdismissPopoverAnimated:YES];

     [visiblePopoverControllerautorelease];

}

当 popover 解散时

    -(void)popoverControllerDidDismissPopover:(FPPopoverController*)popoverController;

当 popover 被解散时调用此方法。这发生在用户点击 popover 以外区域或者发送了一个 dimiss 消息。

 

【iOS开源代码】(4):FPPopover