2010-11-19 1 views
13

Я хотел бы создать новую клавиатуру для iPad.центрирование uipopover в iPad

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

Все это работает нормально.

Теперь - я хочу создать это представление как popover.

У меня есть основные операции, полный (выскакивает и покидает)

Но теперь мне нужно немного тонкой настройки помощи.

Вот мои вопросы ...

1) Как создать окно поповер в центре экрана без выбора UIPopoverArrowDirectionAny?

2) Убедитесь, что окно поповера это размер, который я создал его в файле XIB (в настоящее время, он изменяет и удаляет некоторые из крайнего правого размера окна)

Благодарности
Тони

ответ

57

Чтобы представить его без стрелок передать 0 «permittedArrowDirections»:

[popOverController presentPopoverFromRect:rect inView:view permittedArrowDirections:0 animated:YES]; 

Чтобы центрировать его, передать 1x1 прямоугольник, расположенный в центре вашего зрения:

CGRect rect = CGRectMake(viewWidth/2, viewHeight/2, 1, 1); 
[popOverController presentPopoverFromRect:rect inView:view permittedArrowDirections:0 animated:YES]; 

Тогда у вас есть центрированный и свободный от стрелы поп.

Немного о снятии стрелки можно сломать в любое время. Они не предоставили опцию UIPopoverArrowDirectionNone по какой-либо причине, они могут выбрать исключение в будущем при отправке 0 или по умолчанию что-то делать. Используйте его на свой страх и риск.

+0

Работает для iOS 5.x –

+2

Для iPad в ландшафтном режиме мне пришлось переключать ширину и высоту CGRectMake, чтобы правильно центрировать вещи. – Alan

+1

Работает в iOS 7.0.x также. –

0

Если вы используете UIPopoverController, у него будет стрелка. Вот ваш выбор.

UIPopoverArrowDirectionAny 
UIPopoverArrowDirectionUp 
UIPopoverArrowDirectionDown 
UIPopoverArrowDirectionLeft 
UIPopoverArrowDirectionRight 

Как вы можете видеть, что нет UIPopoverArrowDirectionNone

Что касается размера XIB, в вашем ViewDidLoad Метод файла реализации, вы можете установить следующее.

self.contentSizeForViewInPopover = CGSizeMake(320.0, 360.0); 

Вы можете установить размер любым способом, подходящим для popover.

+0

Да, но если вы hardcode a 0, то как UIPopoverArrowDirectionNone – user2387149

0

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

1) Выберите поповер в раскадровке и снимите флажок Directions Up/Вниз/Влево/Вправо, чтобы избавиться от стрелок.

Для центрирования его на экране переопределение подготовки к Segue и сделать что-то вроде этого:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    UIStoryboardPopoverSegue* popover = (UIStoryboardPopoverSegue*)segue; 
    CGFloat horizontalInset = (self.view.frame.size.width - popover.popoverController.popoverContentSize.width)/(CGFloat)2.0; 
    CGFloat verticalInset = (self.view.frame.size.height - popover.popoverController.popoverContentSize.height)/(CGFloat)2.0; 
    popover.popoverController.popoverLayoutMargins = 
     UIEdgeInsetsMake(
      verticalInset, 
      horizontalInset, 
      verticalInset, 
      horizontalInset); 
} 

В моем случае я также обнаружил, что угол радиус поповер SEGUE не соответствовали моей конструкции, так что я изменить цвет фона чтобы очистить для сортировки, что из т.е. добавить это к вышеупомянутому блоку:

popover.popoverController.backgroundColor = [UIColor clearColor]; 

2) в контроллере назначения для Segue найти атрибут «поповер» и отметьте «Use Явный размер» и поставить размер вы хотите он появится в режиме popover.

 Смежные вопросы

  • Нет связанных вопросов^_^