Как открыть настройки / настройки с iOS 5.1? - PullRequest
35 голосов
/ 09 марта 2012

Похоже, что iOS 5.1 нарушила стандартную кодировку URL для перехода пользователя к предпочтению.

Например:

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

Работает в iOS 5.0, но не в iOS 5.1 (обаустройство и симулятор).

Кто-нибудь нашел способ воспроизвести эту функцию в iOS 5.1?

Ответы [ 4 ]

13 голосов
/ 23 октября 2012

Это немного сложно, я получаю, удаляя подпредставления в *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];
        }

     } 

здесь, делегат - это ваш viewcontroller, если вы используете этот метод внутри вашего viewcontroller, просто используйте self вместо delegate.

EDIT: Если выПолучите все устаревшие ошибки, используйте вместо этого следующий совместимый с 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];
    }
}
11 голосов
/ 12 марта 2012

Нет, я не знаю, как воспроизвести эту функцию.

Но вы можете подать Радар с просьбой о восстановлении. Вот радар , запрашивающий, чтобы схемы были задокументированы в первую очередь.

Дэвид Барнард подтвердил, что iOS 5.1 нарушает схемы URL-адресов приложений настроек.


Обновление : iOS 8 имеет аналогичную функциональность для открытия настроек вашего приложения.Спасибо Apple, Майк и Soto_iGhost .

Константа UIApplicationOpenSettingsURLString (Документация по UIApplication) откроет настройки для вашего приложения, а не, скажем, настройки Twitter.Не совсем та же функциональность, но намного чище, чем раньше, и теперь официально признана.

Это должно быть очень полезно теперь, когда у каждого приложения есть место в настройках для использования конфиденциальности, сотовых данных, фонового обновления приложения и уведомлений.

3 голосов
/ 29 августа 2012

вы можете сделать это.

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];
                    }
1 голос
/ 16 марта 2012

Если вы посмотрите в платформу Twitter (тот контроллер представления Twitter), у него есть «prefs: root = TWITTER» внутри, у 5.1 также есть эта строка.Поэтому, вероятно, Apple сделала что-то, чтобы отключить это для других приложений, например, какой-то специальный ключ в plist или метод «openURL» каким-то образом проверяет, не является ли это системным приложением.

...