如何打开iOS 5.1的偏好设置?

看起来像iOS 5.1打破了标准的URL编码导航用户偏好。

例如:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=TWITTER"]]; 

适用于iOS 5.0,但不适用于iOS 5.1(包括设备和模拟器)。

有没有人find了在iOS 5.1中复制这个function的方法?

不,我不知道复制这个function的方法。

但是你可以做的是提交一份请求修复的雷达。 这是一个雷达,要求首先logging这些scheme。

David Barnard已经确认iOS 5.1打破了设置应用程序的URLscheme。


更新 : iOS 8具有类似的function来打开您的应用程序的设置。 感谢Apple, Mike和Soto_iGhost 。

常量UIApplicationOpenSettingsURLString (UIApplication Documentation)将打开您的应用程序的设置,而不是说Twitter的设置。 不完全相同的function,但比以前更清洁,现在正式承认。

这应该是特别有用的,现在每个应用程序在使用隐私,手机数据,后台应用程序刷新和通知设置的地方。

这是有一点棘手,我通过删除*TWTWeetComposeViewController*的子视图,所以它显示只有当用户没有进入时提醒,通过点击设置button,我们可以打开设置页面在我的应用程序。

  + (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]; } } 

在这里,委托是你的viewcontroller,如果你在viewcontroller里面使用这个方法,只需要使用self而不是delegate

编辑:如果您得到任何不build议使用的错误,请使用下面的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也有这个行。 因此,苹果可能会为其他应用程序禁用它,比如plist中的一些特殊键或“openURL”方法以某种方式检查它是否不是系统应用程序。