2

MFMailComposeViewControllerでの電子メール本文コンテンツの編集を制限する必要があるビジネスルールがあります。コンテンツは事前に入力されており、静的なままである必要があります。UITextViewオブジェクトを取得して、それらの線に沿って無効または何かに設定することは可能ですか?

もう1つの考えは、UITextViewの上部に明確なビューを表示して、相互作用を防ぐことでした。

何か案は?

4

4 に答える 4

2

はい、そうです。答えは、プライベート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:UIWebDocumentViewMFComposeBodyField

[self getMFComposeBodyFieldViewFromView:mailComposeViewController.view];
[self.mailBodyView setEditable:NO];

これにより、本文のコンテンツが編集できなくなります。キーボードが表示されたままで、カーソルを動かして選択できるため、操作がファンキーになりますが、ユーザーが編集できなくなることは間違いありません。

アップデート

MFComposeTextContentViewコードを更新して、どちらが親であるかを探し、そのオブジェクトMFComposeBodyFieldを呼び出しsetEditable:て、キーボードが起動しないようにしました。これは、はるかに優れたソリューションです。

于 2011-01-24T22:22:30.360 に答える
1

申し訳ありませんが、これは不可能であり、ヒューマンインターフェイスガイドラインに違反しています。つまり、これを行うことでアプリケーションが拒否される可能性があります。あなたへの私の唯一のアドバイスは、Appleが提供するものを使用する代わりに、カスタムの電子メールビューコントローラを作成してこれを実装することです。

于 2011-01-24T21:06:16.877 に答える
1

これはMFMailComposeViewControllerでは不可能です。すべてのコンテンツが事前定義されている電子メールを送信する場合は、SMTP接続を実行し、社内の企業メールサーバーを使用して自分で電子メールを送信するだけです。

于 2011-01-24T21:55:21.460 に答える
0

電子メールがデバイスのユーザーのアカウントから発信される必要がない場合は、MFMailComposerViewControllerを使用せずに、自分のサーバーを介して電子メールを送信するだけで済みます。この場合は、アプリをWebサービスと通信させることもできます。

于 2011-01-24T21:22:33.177 に答える