Ответ 1
В то время как есть вопрос о том, одобрит ли Apple приложения, которые создают popover без стрелки, вы можете проверить это сообщение относительно стрелок и это относительно модальных просмотров.
Я хотел бы знать, чтобы сделать UIPopoverController без стрелок
На самом деле я хотел бы симулировать что-то вроде этого:
Смотрите, что
Нет стрелок
Существует заголовок, который как-то внутри расширенной верхней границы UIPopoverController, а не внутри него, как в обычном UIPopoverController.
Я предполагаю, что это не объект UIPopoverController, но я был бы признателен за советы о том, как я могу сделать тот же эффект (используя CoreGraphics? → особенно эффект полупрозрачного деградации 3D-границы) и/или ссылки на некоторые источники, если кто-то сделал это раньше.
Спасибо заранее.
Игнасио
ИЗМЕНИТЬ:
Я все еще ищу этот материал и понял, что даже в сторонних приложениях используется
примером является: twitterrific для iPad, как показано на этом рисунке.
Кто-нибудь, пожалуйста? Помещение заголовка внутри контроллера popover просто уродливо.
В то время как есть вопрос о том, одобрит ли Apple приложения, которые создают popover без стрелки, вы можете проверить это сообщение относительно стрелок и это относительно модальных просмотров.
Следующий метод работает отлично для меня (включая iOS7)
[popoverController presentPopoverFromRect:CGRectMake(0, 0, 20, 20)
inView:self.view
permittedArrowDirections:NULL
animated:YES];
Pass 0
в permittedArrowDirections
.
[popoverController presentPopoverFromRect:YOUR_RECT
inView:self.view
permittedArrowDirections:0
animated:YES];
Чтобы создать popover с заголовком, вам нужно создать отдельный вид, например, вы сделаете отдельное окно, а затем загрузите это представление в popover.
Верхняя граница создается путем размещения контроллера навигации между popover и представленным контроллером представления.
Другими словами, popover представляет собой контроллер навигации, а контроллер корневого контроллера контроллера навигации настроен на ваш контроллер представления. Это создает строку заголовка и позволяет установить заголовок с помощью [self setTitle:@"My Title"]
и добавить кнопки навигации.
Вы можете добавить заголовок с помощью 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];
Просто скопируйте и вставьте указанный ниже код
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];