UIPopoverController 没有箭头?

Posted

技术标签:

【中文标题】UIPopoverController 没有箭头?【英文标题】:UIPopoverController without arrows? 【发布时间】:2010-10-02 09:12:06 【问题描述】:

我想知道制作一个没有箭头的 UIPopoverController 事实上,我想模拟这样的事情:

看到了

没有箭头

有一个标题以某种方式位于 UIPopoverController 的展开顶部边框内,而不是像普通 UIPopoverController 那样位于其内。

我认为这不是一个真正的 UIPopoverController 对象,但我希望得到有关如何制作相同效果的建议(使用 CoreGraphics?-> 特别是 3D 突出边框的半透明降级效果)和/或链接到某些来源,如果以前有人这样做过。

提前致谢。

伊格纳西奥

编辑:

我仍在寻找这些东西,并意识到即使在第三方应用程序中也被使用 一个例子是:在这张图片中看到的 iPad 的 twitterrific。 请问有人吗?将标题放在 popovercontroller 中只是丑陋的。

【问题讨论】:

【参考方案1】:

下面的方法对我来说很好(包括ios7)

 [popoverController presentPopoverFromRect:CGRectMake(0, 0, 20, 20)
                                    inView:self.view 
                  permittedArrowDirections:NULL 
                                  animated:YES];

【讨论】:

+1,但是对于 MonoTouch,使用 uint.MinValue 而不是 "NULL" 来移除箭头【参考方案2】:

0 传递给permittedArrowDirections 属性。

[popoverController presentPopoverFromRect:YOUR_RECT
                                    inView:self.view 
                  permittedArrowDirections:0
                                  animated:YES];

【讨论】:

【参考方案3】:

虽然对于 Apple 是否会批准创建不带箭头的弹出框的应用程序存在一些疑问,但您可能需要查看 post regarding arrows 和 post regarding modal views。

【讨论】:

如果没有出现箭头,我认为没有问题。正如您建议的链接,该选项可用吗? ;) 但我仍然不明白如何在 popovercontroller 中放置标题,就像显示的图片中那样。我已经尝试过 UIViewController 的 title 属性,但不起作用。 我在这里找到了解决方案:***.com/questions/2617409/…【参考方案4】:

要创建带有标题的弹出框,您需要创建一个单独的视图,就像创建一个单独的窗口一样,然后在弹出框中加载该视图。

【讨论】:

【参考方案5】:

顶部边框是通过在弹出框和呈现的视图控制器之间放置一个导航控制器来产生的。

换句话说,弹出框呈现了一个导航控制器,并且导航控制器的根视图控制器设置为您的视图控制器。这会生成标题栏,并允许您使用 [self setTitle:@"My Title"] 设置标题并添加导航按钮。

【讨论】:

【参考方案6】:

您可以使用 UINavigationController 添加标题,并将 UIViewControllers 添加到导航控制器。设置 UIViewController 的 'title' 属性,使标题出现。

正如一些人所建议的,将箭头方向设置为 NULL 会导致不可预知的行为,因为该方法使用此变量来确定如何相对于您的条形按钮项或矩形来确定弹出窗口的方向。

最好继承 UIPopoverBackgroundView,并将各种箭头返回方法设置为箭头返回 0(仅限 iOS5 及更高版本)。请参阅此示例以了解如何正确地对其进行子类化:

http://blog.teamtreehouse.com/customizing-the-design-of-uipopovercontroller

简单实现示例(MyCustomPopoverBGView 是本示例中 UIPopoverBackgroundView 的子类):

UIViewController *vCtrlr = [[UIViewController alloc] initWithNibName:nil bundle:nil];
vCtrlr.title = @"My Title";
self.navCtrlr = [[UINavigationController alloc] initWithRootViewController:vCtrlr];
self.popCtrlr = [[UIPopoverController alloc] initWithContentViewController:_navCtrlr];
_popCtrlr.popoverBackgroundViewClass = [MyCustomPopoverBGView class];
            [_popCtrlr presentPopoverFromRect:CGRectMake(0,
                                                         0,
                                                         320,
                                                         150)
                                       inView:self permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

【讨论】:

【参考方案7】:

只需复制并粘贴以下代码

UIViewController *popovercontroller=[[UIViewController alloc] init];
UIView *popoverView=[[UIView alloc] initWithFrame:CGRectMake(312,390, 400, 344)];
popoverView.backgroundColor=[UIColor whiteColor];

popovercontroller.contentSizeForViewInPopover=CGSizeMake(400, 300);



UIDatePicker *pickerView = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 44, 400, 0)];
[pickerView setTintColor:[UIColor blackColor]];
[pickerView addTarget:self action:@selector(dueDateChanged:) forControlEvents:UIControlEventValueChanged];

pickerView.datePickerMode = UIDatePickerModeDate;
pickerView.hidden = NO;
NSString *bs ; //= [NSString alloc];
//    //NSDate *newDate = [NSData alloc];
bs =  CurrentSelectedDate;
if (bs.length >= 1) 
    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init] ;
    //        //[dateFormatter setDateStyle:NSDateFormatterLongStyle];
    //        [dateFormatter setTimeStyle:NSDateFormatterNoStyle];
    [dateFormatter setDateFormat:@"dd-MMM-yyyy"];
    // NSDate *myDate = [dateFormatter dateFromString: txtText.text];
    pickerView.date = [dateFormatter dateFromString: CurrentSelectedDate];


else

    pickerView.date = [NSDate date];

[popoverView addSubview:pickerView];



// pickerView.date = [dateFormatter dateFromString:txtText.text];
UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 400, 44)];
pickerToolbar.barStyle = UIBarStyleDefault;
pickerToolbar.barTintColor=[UIColor colorWithRed:150.0f/255.0f green:91.0f/255.0f blue:129.0f/255.0f alpha:1.0f];

[pickerToolbar sizeToFit];
self.navigationController.toolbar.barTintColor = [UIColor colorWithRed:150.0f/255.0f green:91.0f/255.0f blue:129.0f/255.0f alpha:1.0f];
NSMutableArray *barItems = [[NSMutableArray alloc] init];

UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:self action:nil];
[barItems addObject:flexSpace];

UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed:)];
doneBtn.tintColor=[UIColor whiteColor];
[barItems addObject:doneBtn];

UIBarButtonItem *cancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelButtonPressed:)];
 cancelBtn.tintColor=[UIColor whiteColor];
[barItems addObject:cancelBtn];

[pickerToolbar setItems:barItems animated:YES];


[popoverView addSubview:pickerToolbar];
popovercontroller.view=popoverView;

pickerViewPopup = [[UIPopoverController alloc] initWithContentViewController:popovercontroller];

[pickerViewPopup presentPopoverFromRect:CGRectMake(312, 212, 400, 344) inView:self.view permittedArrowDirections:0 animated:YES];

【讨论】:

以上是关于UIPopoverController 没有箭头?的主要内容,如果未能解决你的问题,请参考以下文章

如何在顶部左侧有 UIPopOverController 的箭头?

如何使 UIPopoverController 自动改变其箭头方向

将uipopovercontroller的箭头放置在mapkit的注释点

调整大小后调整 UIPopoverController 位置

UIPopoverController 改变 UIPopoverArrowDirection 的位置

从 UITableViewCell 中的详细信息披露按钮显示 UIPopoverController