UIPopoverController без стрелок? - PullRequest
       4

UIPopoverController без стрелок?

14 голосов
/ 02 октября 2010

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

Видеть, что

  • Естьбез стрелок

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

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

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

Игнасио

РЕДАКТИРОВАТЬ:

Я все еще ищу этот материал и понял, что даже в третьемИспользуются сторонние приложения, например: twitterrific для iPad, как видно на этой картинке.Кто-нибудь, пожалуйста?Поместить заголовок внутри popovercontroller просто ужасно.alt text

Ответы [ 7 ]

20 голосов
/ 03 октября 2012

У меня отлично работает приведенный ниже метод (включая iOS7)

 [popoverController presentPopoverFromRect:CGRectMake(0, 0, 20, 20)
                                    inView:self.view 
                  permittedArrowDirections:NULL 
                                  animated:YES];
5 голосов
/ 04 июля 2014
Атрибут

Pass 0 to permittedArrowDirections.

[popoverController presentPopoverFromRect:YOUR_RECT
                                    inView:self.view 
                  permittedArrowDirections:0
                                  animated:YES];
4 голосов
/ 03 октября 2010

Хотя есть некоторый вопрос о том, одобрит ли Apple приложения, создающие всплывающее окно без стрелки, вы можете проверить этот пост о стрелках и этот пост о модальных видах .

1 голос
/ 15 июня 2013

Вы можете добавить заголовок, используя 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];
1 голос
/ 21 марта 2013

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

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

1 голос
/ 24 мая 2011

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

0 голосов
/ 02 апреля 2014

Просто скопируйте и вставьте следующий код

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