Итак, в итоге я использовал следующие результаты с желаемыми результатами. Я поместил следующий блок в метод viewDidLoad моего контроллера представления, как и намекнул Алекс:
- (void)viewDidLoad {
[super viewDidLoad];
UIMenuItem *menuItem = [[UIMenuItem alloc] initWithTitle:@"Change Color" action:@selector(changeColor:)];
[[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObject:menuItem]];
[menuItem release];
}
Затем я добавил следующее в контроллер представления для условного отображения элемента при выделении текста в UITextView, который я назвал «textView»:
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
if (action == @selector(changeColor:)) {
if (textView.selectedRange.length > 0) {
return YES;
}
}
return NO;
}
Я решил разместить canPerformAction: withSender: метод в контроллере представления вместо пользовательского класса UITextView, потому что таким образом другие параметры (например, копирование, вырезание, вставка и т. Д.) Ведут себя так, как обычно, так как метод вызывается на каждом объекте вверх по цепочке респондента.