2010-03-31 9 views
33

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

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

Greets, Thomas

+0

Btw, irc.freenode.net #ipaddev - это место, где нужно быть. – Sneakyness

+0

Эй, Мадхуп, вы могли настроить поп-контроллер вашего приложения. – sandy

ответ

21

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

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

Уверен, вы уже заметили, что нет UIPopover.

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

Ссылки вы хотите нажать:
Cocoacontrols является показатель IOS и OSX компонентов доступен на GitHub, they have some popover stuff.

+7

Начиная с iOS5 теперь вы можете просто подклассифицировать UIPopoverBackgroundView и вернуть свой подкласс в popoverBackgroundViewClass. – steipete

-1

Я знаю, что это паршивый построен ответ, но я просто играл с представления 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, вы не нарушаете никаких правил. Я думаю, это действительно до яблока.

+0

, который не будет работать слишком хорошо - он просто наложит цветной квадрат на задний план. – Pripyat

+2

Вы правы. Я думаю, что моя цель с моим ответом состояла в том, чтобы помочь людям погрузиться в иерархию, сейчас у меня нет времени, чтобы дать полное решение. – maxpower

0

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

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

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

+8

Очень хрупкий. Если Apple решит что-то изменить в иерархии представлений popover, этот код развалится. – DarkDust

51

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

-3

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

NSArray* subviews = ((UIView*)[popupController.contentViewController.view.superview.superview.superview.subviews objectAtIndex:0]).subviews; 
for(UIView *subview in subviews){ 
    [subview removeFromSuperview]; 
} 
+2

-1 Никогда не предполагайте структуру иерархии представлений. – rbrown

8

Бросив свою шляпу здесь;

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

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

+0

какой-нибудь пример? – Hiren

+1

Я не верю, что там что-то есть, но это не может быть проще. просто используйте '-initWithContentViewController: andTintColor:' вместо '-initWithContentViewController:'. Остальное - то же, что и 'UIPopoverController'. –

+0

+1 приятный материал для контроллера popover для пользовательского цвета. Довольно полезно. –

13

IOS 7 вводит backgroundColor свойства UIPopoverController который влияет/включает навигацию цвета фона, а также стрелы пирог. Пример

@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 :), тренажер (и даже некоторые устройства) не соблюдает цвет.

+0

И это включает в себя использование альфа-канала, чтобы иметь прозрачные или частично прозрачные popovers, например. popoverController.backgroundColor = UIColor (белый: 1, alpha: 0.5) –

+0

Не забудьте также изменить цвет/альфа представления внутри вашего popover и элементы управления в этом представлении. –