Как настроить/создать UIPopoverController
Я работаю над iPad-приложением, и я использую UIPopoverControllers. Я в той части, где приложение должно быть заклейменным и стильным, и мне интересно, как изменить цвет/оттенок UIPopoverController? Стандарт темно-синий, но он должен быть другого цвета.
Это возможно?
Приветствия, Томас
Ответы
Ответ 1
Это возможно, начиная с iOS 5.0, путем подкласса абстрактного класса UIPopoverBackgroundView
и назначения вашего подкласса к объекту popoverBackgroundViewClass
на вашем UIPopoverController
экземпляре. К сожалению, нет свойства tintColor
, так как popover должен использовать изображения для него стрелки и границы, чтобы добиться плавной анимации при динамическом изменении размера. Вы можете узнать больше о том, как настроить внешний вид UIPopoverController в Справочник по классу UIPopoverBackgroundView
Ответ 2
Это невозможно сейчас.
Это то, что я называю моделью "Box in a Box". Вы получаете контроль над полем внутри ящика (UIViewController
внутри UIPopoverController
), но у вас очень ограниченный контроль над фактическим popover. Вне направления стрелки и размера вы не можете изменить многое другое. Есть также варианты для модального эффекта popover, который уменьшает все остальное, когда он появляется, но я не пытался заставить его работать.
Я уверен, что вы уже заметили, что нет класса UIPopover
.
Ответ, который вы хотите услышать:
Если вы действительно хотите, чтобы стиль был плохим, просто напишите сами. Это действительно не так сложно.
Ссылка, которую вы хотите нажать:
Cocoacontrols - это индекс компонентов iOS и OSX, доступных на GitHub, они есть кое-какие материалы.
Ответ 3
В 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:), симулятор (и даже некоторые устройства) не соблюдает цвет.
Ответ 4
Бросок моей шляпы здесь;
Я использовал UIPopoverBackgroundView
в iOS 5+, чтобы добавить простое свойство tintColor
на UIPopoverController
s.
PCPopoverController
: https://github.com/pcperini/PCPopoverController
Ответ 5
Я пытаюсь обмануть его, настроив контроллер представления внутри popover, а затем спрятав границу popover с помощью этого кода:
UIView * border = [[insideViewController.view.superview.superview.superview subviews] objectAtIndex:0];
border.hidden = YES;
Приложение на самом деле все еще находится в разработке, поэтому я надеюсь, что другие люди будут комментировать это решение.
Ответ 6
ознакомьтесь с этими последними проектами, используя UIPopoverBackgroundView
https://github.com/CRedit360/C360PopoverBackgroundView
https://github.com/GiK/GIKPopoverBackgroundView
Ответ 7
от ios 5 дальше, это можно сделать, вот библиотека
https://github.com/ddebin/DDPopoverBackgroundView
просто просмотрите документацию, и это довольно легко
удача
Ответ 8
Я знаю, что это отвратительный построенный ответ, но я просто играл с представлениями UIPopoverController. Они существуют.
Единственный способ доступа к ним - это ваш взгляд, который находится в UIPopovercontroller.
У меня есть контроллер навигации, поэтому я следую этой иерархии
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
(возможно, только один супервизор, если вы не видите выход из контроллера навигации) является UIPopoverView. Если вы ставите его как UIView и рассматриваете его как UIView, вы не нарушаете никаких правил. Я думаю, это действительно до яблока, хотя.
Ответ 9
Удалить границу UIPopoverController:
NSArray* subviews = ((UIView*)[popupController.contentViewController.view.superview.superview.superview.subviews objectAtIndex:0]).subviews;
for(UIView *subview in subviews){
[subview removeFromSuperview];
}