2011-01-24 78 views
2

我們有一個業務規則,我們需要限制編輯MFMailComposeViewController上的電子郵件正文內容。內容將被預先填充,並且需要保持靜態。是否有可能抓住UITextView對象並將其設置爲禁用或沿着這些行?禁用MFMailComposeViewController上的編輯

另一個想法是在UITextView的頂部顯示一個清晰的視圖以防止任何交互。

任何想法?

回答

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:方法上UIWebDocumentView其中MFComposeBodyField繼承。

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

這將導致在體內的含量是不可編輯,互動是一種時髦,因爲鍵盤仍然出現,您仍可以移動光標周圍和選擇的東西,但它肯定可以防止用戶編輯。

UPDATE

我更新的代碼來尋找MFComposeTextContentView這是MFComposeBodyField父母和我打電話setEditable:該對象防止鍵盤從上來,更好的解決方案了!

+0

什麼類型的變量是self.mailBodyView? – 2014-05-05 20:22:24

1

對不起,這是不可能的,並且違反了人機界面指南,這意味着您的應用程序可能因此而被拒絕。我唯一的建議是創建一個自定義的電子郵件視圖控制器,並實現這一點,而不是使用Apple提供的。

+2

應用商店的審批是沒有必要的,我們正在通過企業帳戶內部分發。 – 2011-01-24 21:24:28

0

如果電子郵件不必從設備用戶的帳戶發出,那麼您可以簡單地通過您自己的服務器發送電子郵件,而不使用MFMailComposerViewController。如果是這種情況,您也可以讓您的應用程序與Web服務通話。

1

這對於MFMailComposeViewController是不可能的。如果您想發送一封電子郵件,其中的所有內容都已預先定義,那麼您只需執行SMTP連接並使用公司內部企業郵件服務器自行發送電子郵件。