原文: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 消息。