Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 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;

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

Ответ 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];
}