2011-01-24 22 views
2

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

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

アイデア?

答えて

2

いいえ、答えがありませんプライベートAPIを使わずに

私は次のコードでそれを行うことができました。それはIVAR mailBodyViewを設定するように

- (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]; 
     } 
    } 
} 

そして上記メソッドを呼び出し、次にからMFComposeBodyField継承するUIWebDocumentView_setEditable:メソッドを呼び出します。

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

これは、キーボードがまだ表示され、あなたはまだ周りにカーソルを移動して物事を選択することができますが、それは間違いなく編集からユーザーを防ぐため、相互作用は一種のファンキーである、体内のコンテンツは編集できないことにします。

UPDATE

私はMFComposeBodyFieldの親であるMFComposeTextContentViewを探すために、コードを更新し、私はより良い解決策、来てからキーボードを防止し、そのオブジェクトにsetEditable:を呼びます!

+0

どのようなタイプの変数はself.mailBodyViewですか? –

+0

このコードにアクセスすることができなくなったので、 '@class MFComposeTextContentView;でクラスを前方宣言することで達成できるはずの' UIView'または 'MFComposeTextContentView'だったと思います。 –

1

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

+2

アプリストアの承認は必要ありません。エンタープライズアカウントを使用してインハウスを配信しています。 –

0

電子メールがデバイスのユーザーのアカウントから発信される必要がない場合は、MFMailComposerViewControllerを使用しないで自分のサーバーから電子メールを送信することができます。このような場合には、あなたのアプリがWebサービスと対話するようにすることもできます。

1

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

関連する問題