我们有一个业务规则,我们需要限制MFMailComposeViewController上电子邮件正文内容的编辑。内容将预先填充,并且需要保持静态。是否可以获取UITextView对象并将其设置为禁用或沿着这些行?
另一个想法是在UITextView的顶部显示清晰的视图以防止任何交互。
有什么想法吗?
答案 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。如果是这种情况,您也可以让您的应用与网络服务进行对话。