MFMailComposeViewControllerでの電子メール本文コンテンツの編集を制限する必要があるビジネスルールがあります。コンテンツは事前に入力されており、静的なままである必要があります。UITextViewオブジェクトを取得して、それらの線に沿って無効または何かに設定することは可能ですか?
もう1つの考えは、UITextViewの上部に明確なビューを表示して、相互作用を防ぐことでした。
何か案は?
MFMailComposeViewControllerでの電子メール本文コンテンツの編集を制限する必要があるビジネスルールがあります。コンテンツは事前に入力されており、静的なままである必要があります。UITextViewオブジェクトを取得して、それらの線に沿って無効または何かに設定することは可能ですか?
もう1つの考えは、UITextViewの上部に明確なビューを表示して、相互作用を防ぐことでした。
何か案は?
はい、そうです。答えは、プライベート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:
て、キーボードが起動しないようにしました。これは、はるかに優れたソリューションです。
申し訳ありませんが、これは不可能であり、ヒューマンインターフェイスガイドラインに違反しています。つまり、これを行うことでアプリケーションが拒否される可能性があります。あなたへの私の唯一のアドバイスは、Appleが提供するものを使用する代わりに、カスタムの電子メールビューコントローラを作成してこれを実装することです。
これはMFMailComposeViewControllerでは不可能です。すべてのコンテンツが事前定義されている電子メールを送信する場合は、SMTP接続を実行し、社内の企業メールサーバーを使用して自分で電子メールを送信するだけです。
電子メールがデバイスのユーザーのアカウントから発信される必要がない場合は、MFMailComposerViewControllerを使用せずに、自分のサーバーを介して電子メールを送信するだけで済みます。この場合は、アプリをWebサービスと通信させることもできます。