UIPopoverController появляется не в том месте

Итак, я потратил некоторое время на поиск ответа на этот вопрос, но пока ничего не нашел.

Я пытаюсь представить всплывающее окно с помощью кнопки на 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

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

Тогда я нашел этот вопрос: UIBarButtonItem с настраиваемым изображением и без рамки , и я подумал: «ах, возможно, будет лучше, если я представлю всплывающее окно из barbuttonitem вместо того, чтобы делать это таким образом. Подклассы кода UIBarButtonItem, чтобы иметь кнопку с изображением, а не текстом, и правильно представлять barbuttonitem при вызове действия. Это позволило мне использовать ... presentPopoverFromBarButtonItem ...

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

Popover with wrong orientation

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

Это только в: Скрытие и отображение клавиатуры, кажется, делает эту работу немного лучше. Глядя на данные кадра (CGRect) для кнопки, они не меняются между поворотами, если только они не скрыты и не возвращены. Это ошибка?

Итак ... мой вопрос таков: каков наилучший способ представления всплывающего окна из элемента кнопки панели, встроенного в представление аксессуаров пользовательского интерфейса?

Большое спасибо.

7
задан Community 23 May 2017 в 10:28
поделиться