我有这样的方法:
void sendSMS{
if ([MFMessageComposeViewController canSendText]) {
MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
picker.recipients = [NSArray arrayWithObject:@"0933660805"];
[picker setBody:@"Message body"];
picker.messageComposeDelegate = self;
[self.navigationController presentModalViewController:picker animated:YES];
//[picker release];
return;
}
}
邮件编辑器已打开,但收件人和邮件正文为空(下图)。有人知道我该如何解决它:(
答案 0 :(得分:3)
选择这些,然后检查可能会解决您的问题
void sendSMS
{
if ([MFMessageComposeViewController canSendText]) {
MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
picker.messageComposeDelegate = self;
NSString *bodyString = nil;
NSMutableArray *toRecipients = [[NSMutableArray alloc]init];
[toRecipients addObject:@"0933660805"];
[picker setRecipients:(NSArray *)toRecipients];
[toRecipients release];
bodyString = [NSString stringWithFormat: @"Message body"];
[picker setBody:bodyString];
[self presentModalViewController:picker animated:YES];
[picker release];
}
另请参阅本教程http://blog.mugunthkumar.com/coding/iphone-tutorial-how-to-send-in-app-sms/
祝你好运!
答案 1 :(得分:2)
好的我回答了我自己的问题。现在我希望没有其他人必须通过这个。我只是从一个NSObject调用这个方法。它是MFMessageComposeViewControllerDelegate的委托,但没有区别。我不得不将此方法移动到我的MainViewController,然后它工作。
答案 2 :(得分:1)
iOS 10.0就在这里,这对我来说仍然是一个问题。所以,我已经制定了一个解决方法。
根据之前的评论,初始化MFMessageComposeViewController
中的viewDidLoad()
将无法解决问题(我可以证明),除非显示视图控制器,否则不会缓存它。所以,这里的黑客是创建一个窗口,设置它的根视图控制器,呈现一个虚拟 MFMessageComposeViewController
实例,并在实际需要之前的某个地方立即将其解除(如viewDidLoad()
})
这是我正在使用的示例代码(Swift 3.0 - 如果您对Obj-C对应部分感兴趣,请告诉我):
let window = UIWindow()
let vc = UIViewController()
window.rootViewController = vc
let messageCompose = MFMessageComposeViewController()
vc.present(messageCompose, animated: false) { [weak messageCompose] in
messageCompose?.dismiss(animated: false, completion: nil)
}
这里的问题是,如果你将它呈现在当前活动窗口的视图控制器链中,它会通过突然显示和隐藏键盘来搞乱你的UI(无论你如何试图隐藏控制器的视图和什么不是),由于当前的消息正文选择。但是将它添加到一个不在视图循环中的全新窗口中,它将被正确初始化,并且在视图上不会有此类事务的痕迹。另外,你不会以这种方式过多地记忆内存(因为控制器的范围现在应该是最小的),你可以随时初始化你的实际 MFMessageComposeViewController
并获得它现在快得多。如果您的应用程序严重依赖MFMessageComposeViewController
(我怀疑),您可以将其移至AppDelegate,以便在应用程序生命周期的任何地方做好准备。
干杯,
微米。
答案 3 :(得分:0)
试试这个
- (void)sendSMS
{
if ([MFMessageComposeViewController canSendText]) {
MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
picker.messageComposeDelegate = self;
NSString *bodyString = nil;
NSArray *toRecipients = [NSArray arrayWithObject:@"NUMBER HERE"];
[picker setRecipients:toRecipients];
[self presentModalViewController:picker animated:YES];
[picker release];
}
答案 4 :(得分:0)
设置MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
之前if ([MFMessageComposeViewController canSendText]) {...}
试试这个。
答案 5 :(得分:0)
在我的情况下(在iPhone 3g上)问题是当我调用[self.navigationController pushViewController ...]时,当我尝试调用[self presentModalViewController ...]它工作时,我不知道为什么,但它是。试试吧。
答案 6 :(得分:0)
试试这个。
- (void)forwardPromo
{
MFMessageComposeViewController *composeViewController = [[MFMessageComposeViewController alloc] init];
composeViewController.body = @"Message body";
composeViewController.recipients = [NSArray arrayWithObject:@"0933660805"];
composeViewController.messageComposeDelegate = self;
[self presentViewController:composeViewController animated:YES completion:nil];
}
答案 7 :(得分:0)
你应该有一个" nil"在数组的末尾:
composeViewController.recipients = [NSArray arrayWithObject:@"0933660805", nil];