IOS 5.1は、ユーザーを設定にナビゲートするための標準のURLエンコーディングを壊したようです。
例えば:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=Twitter"]];
IOS 5.0では機能しますが、iOS 5.1では機能しません(デバイスとシミュレーターの両方)。
IOS 5.1でこの機能を再現する方法を見つけた人はいますか?
いいえ、この機能を再現する方法がわかりません。
しかし、あなたができることは、復元を要求するレーダーを提出することです。 これはレーダーです スキームを最初に文書化することを要求します。
David Barnard は、iOS 5.1が設定アプリのURLスキームに違反していることを確認しました。
Update: iOS 8にも同様の機能があります アプリの設定を開くため。 Mike および Soto_iGhost に感謝します。
定数 UIApplicationOpenSettingsURLString
(UIApplication Documentation) はアプリの設定を開き、Twitterの設定は開きません。完全に同じ機能ではありませんが、以前よりもはるかにクリーンで、公式に認識されています。
これで、各アプリの[設定]にプライバシー、モバイルデータ、アプリのバックグラウンド更新と通知を使用できるようになったので、これはさらに便利です。
それは少しトリッキーです。*TWTWeetComposeViewController*
のサブビューを削除することで取得できます。そのため、ユーザーがログインしていない場合にのみアラートが表示され、設定ボタンをクリックすると、アプリで設定ページを開くことができます。
+ (void)setAlertForSettingPage :(id)delegate
{
// Set up the built-in Twitter composition view controller.
TWTweetComposeViewController *tweetViewController = [[TWTweetComposeViewController alloc] init];
// Create the completion handler block.
[tweetViewController setCompletionHandler:^(TWTweetComposeViewControllerResult result) {
[delegate dismissModalViewControllerAnimated:YES];
}];
// Present the Tweet composition view controller modally.
[delegate presentModalViewController:tweetViewController animated:YES];
//tweetViewController.view.hidden = YES;
for (UIView *view in tweetViewController.view.subviews){
[view removeFromSuperview];
}
}
ここで、デリゲートはビューコントローラです。ビューコントローラ内でこのメソッドを使用している場合は、self
の代わりにdelegate
を使用してください。
編集:非推奨のエラーが発生した場合は、代わりに次のiOS6互換コードを使用してください。
- (void)setAlertForSettingPage
{
// Set up the built-in Twitter composition view controller.
SLComposeViewController *tweetViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
// Present the Tweet composition view controller modally.
[self presentViewController:tweetViewController animated:YES completion:nil];
for (UIView *view in tweetViewController.view.subviews){
[view removeFromSuperview];
}
}
あなたはこれを行うことができます。
TWTweetComposeViewController *ctrl = [[TWTweetComposeViewController alloc] init];
if ([ctrl respondsToSelector:@selector(alertView:clickedButtonAtIndex:)]) {
// Manually invoke the alert view button handler
[(id <UIAlertViewDelegate>)ctrl alertView:nil
clickedButtonAtIndex:0];
}
Twitterのフレームワーク(そのTwitterビューコントローラ)を見ると、「prefs:root = Twitter」が内部にあり、5.1にもこの行があります。したがって、おそらくAppleは、plist内の特別なキーやメソッド「openURL」など、システムアプリでないかどうかを何らかの方法でチェックするなど、他のアプリに対してそれを無効にする何かを作成しました。