Краткий ответ: вы не можете этого сделать. Вы можете иногда, но не очень надежно. Проблема заключается в том, что «UITextView - это особый случай, и его подклассы для обработки касаний в iPhone OS 3.0 на самом деле невозможны». *
Обходным путем будет подкласс UIWindow и переопределение его метода sendEvent, чтобы он устанавливал целевой прямоугольник вашего меню и затем отображал меню.
UIMenuController *menu = [UIMenuController sharedMenuController];
CGRect selectionRect = CGRectMake(0, 0, 270, 100);
[theMenu setTargetRect:selectionRect inView:theTextView.superview];
[menu setMenuVisible:YES animated:YES];
Однако есть 4 способа вызвать меню редактирования, и это работает только в том случае, если меню вызывается непосредственно сенсорным событием. В других случаях меню создается косвенно в результате прикосновения к другому элементу пользовательского интерфейса (например, выбора или копирования элементов меню или касания синей точки выбора).
Поскольку я не могу надежно контролировать местоположение меню, я решил прослушать скрытие и показать уведомления и переключить взаимодействие с пользователем для просмотра моей рекламы. Но это также не работает, поскольку эти уведомления срабатывают только в том случае, если меню было отображено в результате выполнения setMenuVisible.
Если пользователь нажимает в UITextView и удерживает, это поднимает круглое увеличительное стекло. Когда касание заканчивается, появляется меню. Для этих меню и их детей, насколько я могу судить, невозможно установить их targetRect или получать от них уведомления. Я сдаюсь.
Я подал запрос на улучшение в Apple. Надеюсь, они изменят это в следующей версии ОС.