好吧,我不得不说你真的引起了我的好奇心。现在,就您的问题而言,看起来您对此无能为力。
我采取了几种不同的方法来尝试以默认风格以外的风格呈现作曲家,但收效甚微。我能得到的最接近的是:
UIViewAnimationTransition trans = UIViewAnimationTransitionCurlDown;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationTransition:trans forView:[self view] cache:YES];
[self presentViewController:controller animated:NO completion:nil];
[UIView commitAnimations];
使用这种呈现方式产生了动画效果,但实际上似乎并不适用于作曲家。这只是一个空白页翻转。我还尝试手动添加诸如 alpha 之类的过渡效果,并直接对作曲家视图属性进行转换调整,但这也没有多大作用。
一切都在沸腾:
重要提示:消息组合接口本身不可自定义,并且不得由您的应用程序修改。此外,在呈现界面后,您的应用程序无法对 SMS 内容进行进一步的更改。用户可以使用界面编辑内容,但程序更改会被忽略。因此,如果需要,您必须在呈现界面之前设置内容字段的值
编辑:实际上我想我可能已经找到了一种方法来完成这项工作。您似乎仍然不太可能使用任何类型的自定义转换,而且我不能保证 Apple 会批准这一点,但这应该允许您展示 composer 导航控制器推送样式!
而不是使用:
[self presentViewController:controller animated:YES completion:nil];
采用:
[self.navigationController pushViewController:[[controller viewControllers] lastObject] animated:YES];
这实际上允许您推送给作曲家。默认情况下,此行为不受支持,并会导致错误提示您无法推送到导航控制器(作曲家)。
然后跟进,在- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
简单使用:
[self.navigationController popToRootViewControllerAnimated:YES];
代替:
[self dismissViewControllerAnimated:YES completion:nil];
编辑2:对不起,看起来我忘记了你的问题之一。如果您想从作曲家的一个实例推送到另一个实例,您可以为每个作曲家创建 iVar,在 viewDidLoad 中设置它们,然后在didFinishWithResult
. 然而,这只是部分地解决了问题。就目前而言,我在下面发布的代码可以正常工作,但不能很好地备份。我相信这样做的原因是作曲家希望在成功发送消息后关闭并使其为零,因此取消但被自动禁用。
总的来说,如果你稍微弄乱它,你仍然应该能够让它工作。
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result {
switch (result) {
case MessageComposeResultCancelled:
if (controller == firstComposer) {
[self.navigationController popToRootViewControllerAnimated:YES];
}
else if (controller == secondComposer) {
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];
}
break;
case MessageComposeResultFailed:
NSLog(@"Failed");
break;
case MessageComposeResultSent:
if (controller == firstComposer) {
[self.navigationController pushViewController:[[secondComposer viewControllers] lastObject] animated:YES];
[secondComposer becomeFirstResponder];
}
break;
default:
break;
}
}
链接下载我在其中制作的项目。