在MFMailComposeViewController上禁用编辑

我们有一个业务规则,我们需要限制在MFMailComposeViewController上的电子邮件正文内容的编辑。 内容将被预先填充,并且需要保持静态。 是否有可能抓住UITextView对象,并将其设置为禁用或沿着这些线?

另一个想法是在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 ,然后调用MFComposeBodyFieldinheritance的_setEditable:上的_setEditable:方法。

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

这导致人体内容不可编辑,因为键盘仍然出现,交互是一种时髦,你仍然可以移动光标和select的东西,但它绝对阻止了用户编辑。

UPDATE

我更新了代码,以查找MFComposeTextContentView的父MFComposeBodyField ,我打电话setEditable:该对象,防止键盘出现,更好的解决scheme!

对不起,这是不可能的,违反了人机界面指南,这意味着你的应用程序可能会被拒绝这样做。 我唯一的build议是创build一个自定义的电子邮件视图控制器,并实现这个,而不是使用苹果提供的一个。

用MFMailComposeViewController这是不可能的。 如果你想发送一个电子邮件,其中的所有内容都是预定义的,那么你只需要做SMTP连接,并使用公司内部邮件服务器自己发送电子邮件。

如果电子邮件不必从设备用户的帐户发出,那么您可以简单地通过您自己的服务器发送电子邮件,而不使用MFMailComposerViewController。 如果是这样,你也可以让你的应用程序与Web服务通话。