Rav*_*ran 40 iphone objective-c uipopovercontroller
我需要为我的iPhone应用程序使用UIPopOverController,我搜索stackoverflow有人说UIPopoverController不能在iphone设备上运行为什么?.当我在iphone设备上运行时我得到了这个错误 reason: '-[UIPopoverController initWithContentViewController:]
called when not running under UIUserInterfaceIdiomPad.'
-(void)btnSetRemainderTapped:(UIButton *)button
{
setReminderView =[[SetRemainderView alloc]initWithNibName:@"SetRemainderView" bundle:[NSBundle mainBundle]];
setReminderView.contentSizeForViewInPopover = CGSizeMake(setReminderView.view.frame.size.width, setReminderView.view.frame.size.height);
setReminderView.delegate = self;
popOverController = [[UIPopoverController alloc]
initWithContentViewController:setReminderView] ;
CGRect rect = CGRectMake(self.view.frame.size.width/2, self.view.frame.size.height/2, 1, 1);
[popOverController presentPopoverFromRect:rect
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
谁能帮我?
Phi*_*Fry 66
您可以在iPhone应用程序中使用popoverController.
1.创建一个类别
// UIPopoverController+iPhone.h file
@interface UIPopoverController (iPhone)
+ (BOOL)_popoversDisabled;
@end
// UIPopoverController+iPhone.m file
@implementation UIPopoverController (iPhone)
+ (BOOL)_popoversDisabled {
return NO;
}
@end
Run Code Online (Sandbox Code Playgroud)
2.像往常一样将它导入你的班级并在iPhone中使用popover.
但请记住,这是私有方法,Apple可以拒绝您的应用.但我知道正常使用这个的人和Apple发布他们的应用程序.
Ego*_*sev 43
编辑:正如Soberman所述,自iOS 8以来,可以使用公共API在iPhone上呈现弹出窗口,因此这个答案可能不再相关了.
正如Apple关于UIPopoverController的文档中所述:
Popover控制器仅适用于iPad设备.
因此,遗憾的是,无法在iPhone应用程序中使用此类.但是UIPopoverController提供了一些定制的第三方实现功能,可以添加iPhone支持等等.例如,请参阅https://github.com/50pixels/FPPopover.
编辑:还有另一个高度可定制的popover实现,适用于iPhone/iPad值得一试:https://github.com/nicolaschengdev/WYPopoverController.
Sob*_*man 29
从iOS8开始,我们现在可以创建弹出窗口,在iPhone上也是如此,就像在iPad上一样,对于那些制作通用应用程序的人来说尤其如此,因此无需制作单独的视图或代码.
你可以在这里获得课程和演示项目:https://github.com/soberman/ARSPopover
您需要做的只是子类UIViewController,符合UIPopoverPresentationControllerDelegate协议并设置所需modalPresentationStyle的delegate值以及值:
// This is your CustomPopoverController.m
@interface CustomPopoverController () <UIPopoverPresentationControllerDelegate>
@end
@implementation CustomPopoverController.m
- (instancetype)init {
if (self = [super init]) {
self.modalPresentationStyle = UIModalPresentationPopover;
self.popoverPresentationController.delegate = self;
}
return self;
}
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller {
return UIModalPresentationNone; //You have to specify this particular value in order to make it work on iPhone.
}
Run Code Online (Sandbox Code Playgroud)
此后,实例化从要显示它并分配两个值的方法新创建的子类sourceView和sourceRect.它看起来像这样:
CustomPopoverController *popoverController = [[CustomPopoverController alloc] init];
popoverController.popoverPresentationController.sourceView = sourceView; //The view containing the anchor rectangle for the popover.
popoverController.popoverPresentationController.sourceRect = CGRectMake(384, 40, 0, 0); //The rectangle in the specified view in which to anchor the popover.
[self presentViewController:popoverController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
而且你有它,漂亮,整洁模糊的popover.
Dan*_*sko 14
所以@Sobermans的回答并没有真正解决我从头到尾的问题所以我想详细说明我是如何使用文档完成它的.话虽如此,我确实喜欢使用您自己的表示控制器子类来管理您想要展示的所有自定义.
第一步是实例化您想要呈现的控制器:
let vc: UIViewController = ...
vc.modalPresentationStyle = .Popover
vc.preferredContentSize = CGSize(width: CGRectGetWidth(view.bounds)/2, height: 100)
Run Code Online (Sandbox Code Playgroud)
现在我们有一个带有弹出式演示样式和任意内容大小的控制器.
adaptivePresentationStyleForPresentationController默认情况下,UIPopoverPresentationController将在iPhone上以全屏显示,以防止此行为,您需要强制自适应演示文稿样式为none.
首先,我们设置popover表示控制器的委托
vc.popoverPresentationController.delegate = self;
Run Code Online (Sandbox Code Playgroud)
然后我们实施 UIPopoverPresentationControllerDelegate
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
return .None;
}
Run Code Online (Sandbox Code Playgroud)
首先我们需要调用,presentViewController然后才能配置popover:
presentViewController(vc, animated:true, completion:nil)
if let popover = vc.popoverPresentationController {
popover.permittedArrowDirections = .Right | .Left
popover.sourceView = button
popover.sourceRect = button.bounds
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45479 次 |
| 最近记录: |