Так что я потратил некоторое время на поиски ответа на этот вопрос, но пока ничего не нашел.
Я пытаюсь представить всплывающее окно от кнопки на UIInputAccessoryView. UIBarButtonItem, из которого я хочу отобразить всплывающее окно, имеет собственный вид, поэтому я могу использовать изображение. Я создаю кнопку, как это:
buttonImage=[UIImage imageNamed:@"tags.png"];
aButton=[UIButton buttonWithType:UIButtonTypeCustom];
[aButton setImage:buttonImage forState:UIControlStateNormal];
aButton.frame=CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height);
UIBarButtonItem* compButton2=[[UIBarButtonItem alloc]initWithCustomView:aButton];
[aButton addTarget:self action:@selector(tagIt:) forControlEvents:UIControlEventTouchUpInside];
Когда приходит время показывать поповер, я делаю это так:
CGRect tRect=[((UIButton*)sender) convertRect:((UIButton*)sender).frame toView:self.notePlainText];
NSLog(@"TagIt tRect: %f %f %f %f", tRect.origin.x, tRect.origin.y, tRect.size.width, tRect.size.height);
[self.popoverController presentPopoverFromRect:tRect inView:self.notePlainText permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
Но то, что я получаю, это:
![enter image description here](https://i.stack.imgur.com/W8y1y.png)
Всплывающее окно выглядит нормально, но оно появляется над второй кнопкой, когда оно должно появляться над первой.
Итак, я нашел этот вопрос: UIBarButtonItem с пользовательским изображением и без рамки и я подумал: «Ах, возможно, это будет работать лучше, если я представлю поповер из barbuttonitem вместо того, чтобы делать это таким образом. Подклассы кода UIBarButtonItem для того, чтобы иметь кнопку с изображением, а не текстом, и правильно представлять barbuttonitem при вызове действия. Это позволило мне использовать ... presentPopoverFromBarButtonItem ...
Поэтому я попробовал код во втором ответе в вышеупомянутом вопросе и получил результат, который был лучше. Всплывающее окно указывает вправо на кнопку, как я и хотел, но если ориентация устройства не является книжной с кнопкой внизу, всплывающее окно отображается с неправильной ориентацией:
![Popover with wrong orientation](https://i.stack.imgur.com/TTVGy.png)
Наконец, я укажу, что у меня есть другие элементы панели кнопок в других частях программы, которых нет в UIInputAccessoryViews, которые отображаются правильно и без проблем. Это только кажется, что происходит из вида вспомогательного ввода.
Это только в: Скрытие и показ клавиатуры, кажется, делает эту работу немного лучше. Глядя на данные кадра (CGRect) для кнопки, она не меняется между поворотами, если она не скрыта и не возвращена. Это ошибка?
Итак ... мой вопрос заключается в следующем: каков предпочтительный способ представления всплывающего окна из элемента панели кнопок, встроенного в вспомогательный вид пользовательского интерфейса?
Большое спасибо.