Итак, я потратил некоторое время на поиск ответа на этот вопрос, но пока ничего не нашел.
Я пытаюсь представить всплывающее окно с помощью кнопки на 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];
Но я получаю следующее:
Всплывающее окно выглядит нормально, но появляется поверх второй кнопки когда он должен появиться поверх первого.
Тогда я нашел этот вопрос: UIBarButtonItem с настраиваемым изображением и без рамки , и я подумал: «ах, возможно, будет лучше, если я представлю всплывающее окно из barbuttonitem вместо того, чтобы делать это таким образом. Подклассы кода UIBarButtonItem, чтобы иметь кнопку с изображением, а не текстом, и правильно представлять barbuttonitem при вызове действия. Это позволило мне использовать ... presentPopoverFromBarButtonItem ...
Я попробовал использовать код из второго ответа на вышеупомянутый вопрос и получил лучший результат. Всплывающее окно указывает прямо на кнопку, как я и хотел, но если ориентация устройства не портретная с включенной кнопкой внизу всплывающее окно отображается с неправильной ориентацией:
Наконец, я Я обращаю внимание на то, что у меня есть другие элементы кнопок панели в другом месте программы, которых нет в UIInputAccessoryViews, которые появляются правильно и без проблем. Это только кажется происходящим из представления дополнительных устройств ввода.
Это только в: Скрытие и отображение клавиатуры, кажется, делает эту работу немного лучше. Глядя на данные кадра (CGRect) для кнопки, они не меняются между поворотами, если только они не скрыты и не возвращены. Это ошибка?
Итак ... мой вопрос таков: каков наилучший способ представления всплывающего окна из элемента кнопки панели, встроенного в представление аксессуаров пользовательского интерфейса?
Большое спасибо.