2010-10-02 2 views
14

Я хотел бы знать, чтобы сделать UIPopoverController без стрелок На самом деле я хотел бы, чтобы имитировать что-то вроде этого: Screenshot of the set-passcode screen from the iPad's System PreferencesUIPopoverController без стрелок?

Смотри, что

  • Там нет стрелки

  • Там это название, которое каким-то образом находится внутри расширенной верхней границы UIPopoverController, а не внутри него, как в обычном UIPopoverController.

Я предполагаю, что это на самом деле не объект UIPopoverController, но я был бы признателен за советы о том, как я могу сделать тот же эффект (с использованием CoreGraphics -> специально полупрозрачная Degrade эффект от непогашенной границы 3D) и/ссылки или к некоторым источникам, если кто-то сделал это раньше.

Заранее спасибо.

Игнасио

EDIT:

Я все еще ищу этот материал и понял, что даже в приложениях сторонних используется пример является: Twitterrific для IPad, как показано на рисунке. Кто-нибудь, пожалуйста? Помещение заголовка внутри контроллера popover просто уродливо. alt text

ответ

4

Хотя есть некоторые вопросы о том, будет ли компания Apple утвердить приложения, которые создают поповер без стрелки, вы можете проверить это post regarding arrows и это post regarding modal views.

+0

Не думаю, что есть проблемы, если стрелки не отображаются. Как ссылка, которую вы предложили, опция доступна? ;) Но я до сих пор не понимаю, как поставить заголовок в popovercontroller, как показано на рисунках. Я пробовал свойство названия UIViewController, но не работал. – nacho4d

+0

Я нашел решение здесь: http://stackoverflow.com/questions/2617409/setting-the-title-of-a-uipopovercontroller – nacho4d

1

Чтобы создать popover с заголовком, вам нужно создать отдельный вид, например, вы сделаете отдельное окно, а затем загрузите это представление в popover.

19

В приведенной ниже метод хорошо для меня работает (в том числе iOS7)

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

+1, но для MonoTouch используйте uint.MinValue вместо «NULL», чтобы удалить стрела –

1

Верхняя граница производится путем размещения навигационного контроллера между и пирог представленного контроллера представления.

Другими словами, popover представляет навигационный контроллер, а контроллер корневого контроллера контроллера навигации установлен на ваш контроллер представления. Это создает строку заголовка и позволяет установить заголовок с [self setTitle:@"My Title"] и добавить кнопки навигации.

1

Вы можете добавить заголовок с помощью UINavigationController и добавить UIViewControllers в контроллер навигации. Задайте атрибут title для UIViewController, чтобы заголовок появился.

Установка направления стрелки в 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

Проход 0 до permittedArrowDirections.

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