2015-09-13 5 views
1

Мое приложение является только IPad и вид корневой встроен в контроллер навигации, который имеет два субсчета просмотров:сделать пользовательский вид палку в верхней части клавиатуры, вращая устройство

1) UITextView (не UITextField), которая охватывает всей области, за исключением навигационной панели.

2) другой UIView, который служит в качестве инструментальной панели. Он охватывает UITextView и первоначально остается в нижней части корневого представления.

enter image description here

Теперь я могу сделать «панель инструментов» идет вверх и вниз синхронно с виртуальной клавиатурой.

Но есть одна проблема: если я вращает устройство в то время как клавиатура показывает, на «панель инструментов» больше не прилипает к верхней части виртуальной клавиатуры, вместо этого он остается в центре экрана при вращении и падает, чтобы встретить клавиатуру после поворота, что довольно уродливо.

enter image description here

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

Может ли кто-нибудь дать мне совет по этому поводу?

Примеры такого UITextView с панели инструментов в нижней части приложений могут быть Document Pro или Pages.

+0

нужно больше разъяснений с снимок экрана – Jamil

ответ

3

Я рекомендую использовать inputAccessoryView свойство UITextView.

UIToolbar* toolbar = [[UIToolbar alloc] init]; 
toolbar.barStyle = UIBarStyleDefault; 
toolbar.items = [NSArray arrayWithObjects: 
         [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:nil action:nil], 
         [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:nil action:nil], 
         [[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:nil], 
         [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:nil], 
         nil]; 
[toolbar sizeToFit]; 
self.textfiled.inputAccessoryView = toolbar; 

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

+0

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

+0

@ Крис Да, вы правы. Панель инструментов будет долго работать с клавиатурой. Если вам нужна отдельная панель инструментов внизу, вам нужно сделать это отдельно. –

0

В качестве альтернативы вы можете вручную разместить панель инструментов без применения ограничений. Для этого вы можете:

Добавить метод обработки клавиатуры.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:)            name:UIKeyboardDidShowNotification object:nil]; 

В этом методе вам необходимо рассчитать текущую высоту клавиатуры.

- (void)keyboardWasShown:(NSNotification*)aNotification 
{ 
    NSDictionary* info = [aNotification userInfo]; 
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 
    self.keyboardHeight = MIN(kbSize.height, kbSize.width); 
    [self layoutElements]; 
} 

Этот метод также вызывается при повороте устройства.

Затем в вашем обычном layoutElements методе вы используете предварительно рассчитанную высоту клавиатуры для размещения вашей панели инструментов.

Вы можете использовать размер вашего зрения корня или размера экрана ([[UIScreen mainScreen] bounds].size), но обратите внимание, что в iOS7 и iOS8 + существуют различные значения для width и height в зависимости от ориентации.

Чтобы гарантировать, что ваш пользовательский способ макета (layoutElements) называется, вы также можете поместить его внутри метода viewWillLayoutSubviews.

- (void) viewWillLayoutSubviews { 
    [super viewWillLayoutSubviews]; 
    [self layoutElements]; 
} 
Смежные вопросы