禁用MFMailComposeViewController上的编辑

时间:2011-01-24 20:46:54

标签: iphone ipad ios mfmailcomposeviewcontroller

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

另一个想法是在UITextView的顶部显示清晰的视图以防止任何交互。

有什么想法吗?

4 个答案:

答案 0 :(得分: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的{​​{1}}方法。

MFComposeBodyField

这导致正文中的内容无法编辑,交互有点时髦,因为键盘仍然出现,您仍然可以移动光标并选择一些东西,但它肯定会阻止用户编辑。

<强>更新

我更新了代码,以查找[self getMFComposeBodyFieldViewFromView:mailComposeViewController.view]; [self.mailBodyView setEditable:NO]; 的父MFComposeTextContentView,我在该对象上调用MFComposeBodyField,这会阻止键盘出现,这是更好的解决方案!

答案 1 :(得分:1)

很抱歉这是不可能的,并违反了人机界面指南,这意味着您的申请可能会被拒绝执行此操作。我唯一的建议是创建一个自定义电子邮件视图控制器并实现它,而不是使用Apple提供的。

答案 2 :(得分:1)

使用MFMailComposeViewController是不可能的。如果您要发送预定义所有内容的电子邮件,那么您只需要进行SMTP连接并使用内部企业邮件服务器自行发送电子邮件。

答案 3 :(得分:0)

如果电子邮件不必来自设备用户的帐户,那么您只需通过自己的服务器发送电子邮件,而不是使用MFMailComposerViewController。如果是这种情况,您也可以让您的应用与网络服务进行对话。