Подтвердить что ты не робот

Как открыть настройки/настройки с помощью iOS 5.1?

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

Например:

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

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

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

4b9b3361

Ответ 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" каким-то образом проверяет, не является ли это системным приложением.