Как открыть настройки/настройки с помощью iOS 5.1?
Похоже, что iOS 5.1 нарушила стандартную кодировку URL для навигации пользователя к предпочтению.
Например:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=TWITTER"]];
Работает в iOS 5.0, но не в iOS 5.1 (как на устройстве, так и на симуляторе).
Кто-нибудь нашел способ репликации этой функции в iOS 5.1?
Ответы
Ответ 1
Нет. Я не знаю способ репликации этой функции.
Но то, что вы можете сделать, это файл Radar с запросом на восстановление. Вот радар, требующий, чтобы схемы были задокументированы в первую очередь.
Дэвид Барнард подтвердил, что iOS 5.1 нарушает настройки URL-адресов приложений.
Обновление: iOS 8 имеет аналогичную функциональность для открытия настроек ваших приложений. Спасибо Apple, Майк и Soto_iGhost.
Постоянная UIApplicationOpenSettingsURLString
(Документация UIApplication) откроет настройки вашего приложения, а не, скажем, настройки Twitters. Не совсем такая же функциональность, но намного чище, чем раньше и теперь официально признана.
Это должно быть особенно полезно теперь, когда каждое приложение имеет место в настройках для использования конфиденциальности, сотовых данных, обновления фоновых приложений и уведомлений.
Ответ 2
Немного сложно, я получаю, удаляя subviews в *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];
}
}
здесь, делегат - ваш диспетчер view, если вы используете этот метод внутри своего диспетчера view, просто используйте 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];
}
}
Ответ 3
вы можете это сделать.
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];
}
Ответ 4
Если вы посмотрите в платформе Twitter (это контроллер просмотра Twitter), он имеет "prefs: root = TWITTER" внутри, 5.1 также имеет эту строку. Вероятно, Apple сделала что-то, чтобы отключить его для других приложений, например, какой-то специальный ключ в plist или метод "openURL" каким-то образом проверяет, не является ли это системным приложением.