2010-10-02 193 views
14

我想知道作出UIPopoverController没有箭头 其实我想模仿这样的事情: Screenshot of the set-passcode screen from the iPad's System Preferences没有箭头的UIPopoverController?

请参阅

  • 没有箭头

  • 有是一个标题,它在UIPopoverController的扩展顶部边界内部,而不像在普通的UIPopoverController中那样。

我想这是不是一个真正的UIPopoverController对象,但我会很感激我如何能做出同样的效果建议(使用CoreGraphics中? - >专门的3D悬而未决的边界的半透明降解作用)和/或链接如果有人曾经这样做过,请联系我们。

在此先感谢。

伊格纳西奥

编辑:

我还在找这个东西,并意识到,即使是在第三方应用程序正在使用 一个例子是:twitterrific用于iPad作为在这张照片看到的。 任何人都可以吗?把标题放在popovercontroller里面很丑陋。 alt text

回答

4

尽管有许多关于苹果是否会批准,如果没有箭头创建酥料饼的应用程序的一些问题,你可能想看看这个post regarding arrowspost regarding modal views

+0

如果没有箭头出现,我认为没有问题。作为您建议的链接,该选项可用吗? ;)但是我仍然不知道如何在popovercontroller中放置标题,如图所示。我曾尝试UIViewController的标题属性,但无法正常工作。 – nacho4d 2010-10-04 17:57:20

+0

我在这里找到了解决方案:http://stackoverflow.com/questions/2617409/setting-the-title-of-a-uipopovercontroller – nacho4d 2010-10-04 18:06:04

1

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

19

以下方法工作正常,我(包括iOS7)

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

+1,但对于MonoTouch,请使用uint.MinValue而不是“NULL”来删除箭头 – 2013-11-06 19:58:09

1

顶部边界是通过将酥料饼和所呈现的视图控制器之间的导航控制器产生。

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

1

您可以使用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]; 
0

只需复制&粘贴下面的代码

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]; 
4

通票0permittedArrowDirections属性。

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