在我为iPhone实现类似的东西之前,我想知道是否有人为iPhone实现了类似UIPopOverController的东西.到目前为止,这仅适用于iPad.
在第二次显示弹出控制器时(在解除它然后重新显示它之后),我收到以下错误:
因未捕获的异常'NSGenericException'而终止应用程序,原因:' - [UIPopoverController dealloc]到达,而popover仍然可见.
堆栈跟踪只是一堆十六进制,SIGABRT每次都发生在UIApplicationMain.这是按钮触发的代码:
- (IBAction)createNewScore:(id)sender {
if (self.pc)
if (self.pc.popoverVisible)
return;
else
// Breakpoint is hit here—crashes after this line
[self.pc presentPopoverFromBarButtonItem:(UIBarButtonItem *)sender permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
NGDocumentInfoViewController *documentInfoVC = [[NGDocumentInfoViewController alloc] initWithBlankDocumentTargetInManagedObjectContext:self.context];
UINavigationController *navc = [[UINavigationController alloc] initWithRootViewController:documentInfoVC];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneCreatingNewScore:)];
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelCreatingNewScore:)];
navc.navigationBar.topItem.leftBarButtonItem = doneButton;
navc.navigationBar.topItem.rightBarButtonItem = cancelButton;
CGSize popoverSize = CGSizeMake(documentInfoVC.view.bounds.size.width, documentInfoVC.view.bounds.size.height);
documentInfoVC.contentSizeForViewInPopover = popoverSize;
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:navc];
popover.delegate = self;
self.pc …Run Code Online (Sandbox Code Playgroud) memory-management dealloc uipopovercontroller ios automatic-ref-counting
我正在创建iOS提供的popover的自定义布局.我已经将UIPopoverBackgroundView子类化,并让它为我的popover正确绘制背景.我的问题是现在UIPopoverController在popover上创建了一个内部阴影,影响了popover的contentViewController.我想删除这个内部阴影,所以只显示我的contentViewController的内容.
这是popover当前的外观,使用UILabel来演示对contentViewController的影响.

有没有办法去除这个内部阴影?
我试图将一个弹出按钮放在一个按钮上.我似乎无法弄清楚我可能会出错的地方.它不是按钮位于按钮中间,而是偏离屏幕宽度的一半.
@IBAction func buttonClicked(sender: AnyObject){
var popoverViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ServiceOptions") as! ServiceOptionsPopover
popoverViewController.delegate = self
popoverViewController.modalPresentationStyle = .Popover
popoverViewController.preferredContentSize = CGSizeMake(300, 300)
let popoverPresentationViewController = popoverViewController.popoverPresentationController
popoverPresentationViewController?.permittedArrowDirections = .Up
popoverPresentationViewController?.delegate = self
popoverPresentationViewController?.sourceView = sender as! UIButton
popoverPresentationViewController?.sourceRect = sender.frame
presentViewController(popoverViewController, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud) Apple的UIActionSheet文档让我感到困惑.首先,在iPad人机界面指南中,它说:
要了解有关在代码中使用操作表的更多信息,请参阅"iPad编程指南"中的"使用弹出窗口显示内容".
但是在"使用弹出窗口显示内容"部分中,它根本没有提到动作表!我在这里错过了什么吗?
我的主要问题是:在iPad上,UIPopoverController和UIActionSheet有什么区别?如果UIActionSheet自动出现在UIPopoverController中,是否有任何理由使用UIActionSheet?我看到它的委托和按钮的自动创建如何减少代码行数,但从可用性POV来看,是否存在差异?
此外,显示带动画的actionSheet根本不起作用.它的外观和行为与没有动画时显示的actionSheet完全相同(这与我刚刚使用UIPopoverController并且根本没有使用actionSheet完全相同).这是我的代码:
UIActionSheet *action = [[UIActionSheet alloc] initWithTitle:@"An unsaved property already exists. You must assign a name to this property before creating a new property. Would you like to:"
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:@"Overwrite"
otherButtonTitles:@"Open unsaved property", nil];
[action showFromRect:CGRectMake(0, 0, 200, 200) inView:self.mainSplitViewController.view animated:NO];
Run Code Online (Sandbox Code Playgroud)
我如何获得一个看起来像Apple文档中的示例动画actionSheet的actionSheet(从地图应用程序中,您向联系人添加位置)?
我可能最终会使用警报而不是弹出窗口或actionSheet,但理解这一点仍然有用.
谢谢!
objective-c uialertview uiactionsheet ipad uipopovercontroller
我的目标是为UIPopoverController保持相同的坐标,只需改变箭头偏移量.所以基本上我有三个按钮触摸每个按钮显示一个弹出窗口.当呈现此弹出窗口时,它会更改屏幕上的位置,但我不希望这样.要更清楚地看一下screenoshots:



我在一个项目中注意到,由于某种原因,右侧栏按钮项目上的弹出框的位置似乎偏向右侧.我尝试使用UIButton作为自定义视图,然后从该按钮呈现弹出窗口,但是如果我实际上为它提供了'居中'值,则popover似乎忽略了showFromRect.

这背后的代码非常简单:
- (void)viewDidLoad {
[super viewDidLoad];
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"share"] style:UIBarButtonItemStylePlain target:self action:@selector(shareTap:)];
self.navigationItem.rightBarButtonItem = button;
}
- (void)shareTap:(UIBarButtonItem *)button {
self.popover = [[UIPopoverController alloc] initWithContentViewController:[[UIViewController alloc] init]];
[self.popover presentPopoverFromBarButtonItem:button permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我切换到使用内部按钮,如上所述,我看到类似的行为(注意颜色变化,因此图像显示).

这个代码仍然相当简单:
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *innerButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 22, 22)];
[innerButton setImage:[UIImage imageNamed:@"share"] forState:UIControlStateNormal];
[innerButton addTarget:self action:@selector(shareTap:) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:innerButton];;
}
- (void)shareTap:(UIButton *)button {
self.popover = [[UIPopoverController alloc] initWithContentViewController:[[UIViewController alloc] init]];
// CGRect …Run Code Online (Sandbox Code Playgroud) 单击rightBarButton时,将显示UIPopoverController.
问题是:当点击NavigationBar时,此UIPopoverController不会被忽略.
为什么?有没有办法解决它?我试图搜索,但找不到任何关于此的内容.
提前致谢.
根据5.1 SDK(发行版)编译我的iPad应用程序会导致UIPopoverController使用左侧演示文稿中的新"幻灯片放映"显示自己.这完全打破了我的popover演示,它依赖于具有"黑色"样式标题和一定高度.我试过设置presentsWithGesture到NO,但似乎只禁用滑动手势,并不会停止的演讲风格.
这个相同的应用程序,无需重新编译,但在iOS 5.1上运行,使用旧的popover演示文稿样式.所以我知道iOS 5.1仍然支持向后兼容的方法.如何选择激活弹出窗口的旧演示文稿?
不幸的是,这对我的应用程序非常重要.
如果不这样做,有没有办法在新的弹出窗口上获得"黑色"标题?
虽然我的应用程序中有一个UISplitViewController,但它不负责显示弹出窗口.相反,我正在使用此代码:
[self.popoverController presentPopoverFromRect:ipadButtonMenu.frame
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionUp
animated:YES];
Run Code Online (Sandbox Code Playgroud)
这个问题是由苹果开发者论坛中交叉张贴在这里.我希望有人有答案.
预期演讲: 
在iOS 5.1 SDK下编译后的演示文稿: 
我为iPhone制作了一个应用程序.现在,我正在为iPad重新创建它.
当用户选择工具栏中的操作按钮时,弹出窗口应显示a UIActivityViewController,但由于某种原因,它需要大约10秒才能显示第一次.在iPhone上,它需要大约一秒钟.除了弹出框之外,它是相同的代码.
我尝试禁用弹出窗口,但仍需要大约10秒才能显示.
这是代码:
-(IBAction)Actions:(UIBarButtonItem*)sender
{
if ([activityPopover isPopoverVisible] == YES)
{
[activityPopover dismissPopoverAnimated:YES];
return;
}
UIWebView *currentWebView = ((TabView *)self.tabs[self.currentTabIndex]).webViewObject;
NSString *currentURL = (NSString*)[currentWebView request].mainDocumentURL;
if (currentURL == NULL) return;
BookmarkActivity *bookmarkActivity = [[BookmarkActivity alloc] init];
UIActivityViewController *sharing = [[UIActivityViewController alloc] initWithActivityItems:[NSArray arrayWithObject:currentURL] applicationActivities:@[bookmarkActivity]];
activityPopover = [[UIPopoverController alloc] initWithContentViewController:sharing];
[activityPopover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
我已经在我的iPad 3和我的iPad mini上进行了测试,两者都需要一段时间来呈现.
我该如何解决这个问题?
objective-c uipopovercontroller ios uiactivityviewcontroller
ios ×6
objective-c ×4
ipad ×3
ios5 ×2
iphone ×2
cocoa-touch ×1
dealloc ×1
ios4 ×1
swift ×1
uialertview ×1
uikit ×1