Отключить редактирование на MFMailComposeViewController - PullRequest
2 голосов
/ 24 января 2011

У нас есть бизнес-правило, в котором нам нужно ограничить редактирование содержимого тела письма в MFMailComposeViewController. Контент будет предварительно заполнен и должен оставаться статичным. Можно ли захватить объект UITextView и установить его отключенным или что-то в этом роде?

Еще одна мысль состояла в том, чтобы отобразить четкое представление поверх UITextView, чтобы предотвратить любое взаимодействие.

Есть идеи?

Ответы [ 4 ]

2 голосов
/ 25 января 2011

Хорошо, да, ответ таков: невозможно без использования частных 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: для этого объекта, который запрещает клавиатуруот более подходящего решения!

1 голос
/ 25 января 2011

Это невозможно с MFMailComposeViewController. Если вы хотите отправить электронное письмо, в котором предопределено все содержимое, вам просто нужно установить SMTP-соединение и отправить электронное письмо самостоятельно, используя собственный корпоративный почтовый сервер.

1 голос
/ 25 января 2011

Извините, это невозможно, и это нарушает Рекомендации по интерфейсу пользователя, что означает, что вашему приложению может быть отказано в этом.Мой единственный совет для вас - создать собственный контроллер представления электронной почты и реализовать его вместо использования предоставленного Apple.

0 голосов
/ 25 января 2011

Если электронная почта не должна исходить из учетной записи пользователя устройства, вы можете просто отправить электронную почту через свой собственный сервер, не используя MFMailComposerViewController.Вы также можете просто поговорить с вашим приложением о веб-службе, если это так.

...