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