Хорошо, да, ответ таков: невозможно без использования частных API .
Мне удалось сделать это с помощью следующего кода.
- (void) getMFComposeBodyFieldViewFromView:(UIView *)view {
for (UIView *item in view.subviews) {
if ([[[item class] description] isEqualToString:@"MFComposeTextContentView"]) {
self.mailBodyView = item;
break;
}
if([item.subviews count] > 0) {
[self getMFComposeBodyFieldViewFromView:item];
}
}
}
Затем вызовите вышеуказанный метод, чтобы он установил ivar mailBodyView
, а затем вызовите метод _setEditable:
для UIWebDocumentView
, от которого наследуется MFComposeBodyField
.
[self getMFComposeBodyFieldViewFromView:mailComposeViewController.view];
[self.mailBodyView setEditable:NO];
Это вызывает содержимое в телечтобы быть недоступным для редактирования, взаимодействие выглядит довольно прикольным, потому что клавиатура все еще появляется, и вы все еще можете перемещать курсор и выбирать объекты, но это определенно мешает пользователю редактировать.
ОБНОВЛЕНИЕ
Я обновил код для поиска MFComposeTextContentView
, который является родителем MFComposeBodyField
, и я вызываю setEditable:
для этого объекта, который запрещает клавиатуруот более подходящего решения!