ええと、あなたはこれで私の好奇心を真剣に捉えたと言わざるを得ません。さて、あなたの質問に関する限り、これについてできることはそれほど多くないようです。
私は作曲家をデフォルト以外のスタイルで表現しようとして、いくつかの異なるアプローチを取りましたが、ほとんど成功しませんでした。私が得ることができた最も近いものはこれでした:
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];
このプレゼンテーション方法を使用すると、アニメーション効果が発生しましたが、実際には作曲者には適用されないようでした. 白紙のページをめくるだけでした。また、アルファなどのトランジション効果を手動で追加し、作曲家のビュー プロパティに直接調整を加えようとしましたが、それもあまり効果がありませんでした。
すべてがこれに沸騰し続けました:
重要: メッセージ作成インターフェース自体はカスタマイズできないため、アプリケーションで変更しないでください。さらに、インターフェイスを表示した後、アプリケーションは 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:申し訳ありませんが、質問のポイントの 1 つを忘れていたようです。コンポーザーの 1 つのインスタンスから別のインスタンスにプッシュする場合は、コンポーザーごとに iVar を作成し、それらを viewDidLoad で設定してから、didFinishWithResult
. ただし、これは問題を部分的にしか解決しません。現状では、以下に投稿したコードは問題なく機能しますが、バックアップはうまくいきません。この理由は、メッセージが正常に送信された後、作曲家が閉じられて nil になることを期待しているためであり、その結果、キャンセルは自動的に無効になるためだと思います。
全体として、少しいじっても、これを機能させることができるはずです。
- (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;
}
}
これを作成したプロジェクトをダウンロードするためのリンク。