Как настроить / создать UIPopoverController

Я работаю над iPad-приложением, и я использую UIPopoverControllers. Я в той части, где приложение должно быть заклейменным и стильным, и мне интересно, как изменить цвет / оттенок UIPopoverController? Стандарт темно-синий, но он должен быть другого цвета ..

Это возможно?

Привет, Томас

Это возможно, начиная с iOS 5.0 путем подclassа абстрактного classа UIPopoverBackgroundView и назначения вашего подclassа popoverBackgroundViewClass в вашем экземпляре UIPopoverController . К сожалению, нет свойства tintColor поскольку popover должен использовать изображения для своей стрелки и границы, чтобы добиться плавной анимации при динамическом изменении размера. Вы можете узнать больше о том, как настроить внешний вид UIPopoverController в справочнике classов UIPopoverBackgroundView

Это невозможно сейчас.

Это то, что я называю моделью «Box in a Box». Вы получаете контроль над ящиком внутри поля ( UIViewController внутри UIPopoverController ), но у вас очень ограниченный контроль над фактическим popover. Вне направления стрелки и размера вы не можете изменить многое другое. Есть также варианты для модального эффекта popover, который уменьшает все остальное, когда он появляется, но я не пытался заставить его работать.

Я уверен, вы заметили, что сейчас нет classа UIPopover .

Ответ, который вы хотите услышать:
Если вы действительно хотите, чтобы стиль был плохим, просто напишите сами. Это действительно не так сложно.

Ссылка, которую вы хотите нажать:
Cocoacontrols – это индекс компонентов iOS и OSX, доступных на GitHub, у них есть кое-какие материалы.

В iOS 7 вводится свойство backgroundColor UIPopoverController которое влияет на цвет фона навигации, а также стрелки popover.

 @property (nonatomic, copy) UIColor *backgroundColor NS_AVAILABLE_IOS(7_0); 

Пример использования:

  if ([self.popoverVC respondsToSelector:@selector(setBackgroundColor:)]) { // Check to avoid app crash prior to iOS 7 self.popoverVC.backgroundColor = [UIColor greenColor]; // [UIColor colorWithPatternImage:@"..."] doesn't reflect the color on simulator but on device it works! } 

Примечание. На данный момент (iOS 7.0.3), в некоторых случаях (например, заданный цвет с использованием colorWithPatternImage :), симулятор (и даже некоторые устройства) не соблюдает цвет.

Бросок моей шляпы здесь;

Я использовал UIPopoverBackgroundView в iOS 5+, чтобы добавить простое свойство UIPopoverController s.

PCPopoverController : https://github.com/pcperini/PCPopoverController

Я пытаюсь обмануть его, настроив controller представления внутри popover, а затем спрятав границу popover с помощью этого кода:

 UIView * border = [[insideViewController.view.superview.superview.superview subviews] objectAtIndex:0]; border.hidden = YES; 

Приложение на самом деле все еще находится в разработке, поэтому я надеюсь, что другие люди будут комментировать это решение.

ознакомьтесь с этими последними проектами, используя UIPopoverBackgroundView https://github.com/CRedit360/C360PopoverBackgroundView https://github.com/GiK/GIKPopoverBackgroundView

от ios 5 до этого можно сделать, вот библиотека

https://github.com/ddebin/DDPopoverBackgroundView

просто посмотрите на документацию, и это довольно просто

удачи

Я знаю, что это отвратительный ответ, но я просто играл с представлениями UIPopoverController. Они существуют.

Единственный способ доступа к ним – это ваше мнение, которое находится в UIPopovercontroller.

У меня есть controller навигации, поэтому я следую этой иерархии

 UIView *test = ((UIView *)[[[self.navigationController.view.superview.superview.subviews objectAtIndex:0] subviews] objectAtIndex:1]); UIView *test2 = ((UIView *)[[[self.navigationController.view.superview.superview.subviews objectAtIndex:0] subviews] objectAtIndex:1]); test.backgroundColor = [UIColor greenColor]; test2.backgroundColor = [UIColor greenColor]; 

Это не совсем конечная цель, но она очень близка.

вы обнаружите, что the_view_in_the_popover.superview.superview (возможно, только один супервизор, если вы не достигаете представления controllerа навигации) является UIPopoverView. Если вы ставите его как UIView и рассматриваете его как UIView, вы не нарушаете никаких правил. Я думаю, это действительно до яблока.

Удалите границу UIPopoverController:

  NSArray* subviews = ((UIView*)[popupController.contentViewController.view.superview.superview.superview.subviews objectAtIndex:0]).subviews; for(UIView *subview in subviews){ [subview removeFromSuperview]; } 
Давайте будем гением компьютера.