Как настроить / создать UIPopoverController
Я работаю над iPad-приложением, и я использую UIPopoverControllers. Я в той части, где приложение должно быть заклейменным и стильным, и мне интересно, как изменить цвет / оттенок UIPopoverController? Стандарт темно-синий, но он должен быть другого цвета ..
Это возможно?
Привет, Томас
- Инструменты для поиска включенных заголовков, которые не используются?
- Какой стиль комментариев следует использовать в пакетных файлах?
- Android: как обрабатывать жесты с правой стороны налево
- Это нормально, если я опускаю фигурные скобки на Java?
- Как использовать кеширование диска в Picasso?
Это возможно, начиная с 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]; }