web-dev-qa-db-fra.com

Comment ouvrir les préférences / paramètres avec iOS 5.1?

On dirait qu'iOS 5.1 a cassé l'encodage d'URL standard pour diriger un utilisateur vers une préférence.

Par exemple:

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

Fonctionne dans iOS 5.0 mais pas dans iOS 5.1 (appareil et simulateur).

Quelqu'un a-t-il trouvé un moyen de reproduire cette fonctionnalité dans iOS 5.1?

35
James Jones

Non, je ne connais pas de moyen de reproduire cette fonctionnalité.

Mais ce que vous pouvez faire, c'est déposer un radar demandant la restauration. Voici un radar demandant que les plans soient documentés en premier lieu.

David Barnard a confirmé que iOS 5.1 rompt les schémas d'URL des applications de paramètres.


Mise à jour : iOS 8 a des fonctionnalités similaires pour ouvrir les paramètres de votre application. Merci Apple, Mike et Soto_iGhost .

La constante UIApplicationOpenSettingsURLString (Documentation UIApplication) ouvrira les paramètres de votre application et non, par exemple les paramètres de Twitter. Pas exactement la même fonctionnalité mais beaucoup plus propre qu'avant et maintenant officiellement reconnu.

Cela devrait être très utile maintenant que chaque application a une place dans les paramètres pour utiliser la confidentialité, les données cellulaires, l'actualisation de l'application en arrière-plan et les notifications.

11
JoePasq

C'est peu compliqué, j'obtiens en supprimant les sous-vues dans *TWTWeetComposeViewController*, il n'affiche que l'alerte lorsque l'utilisateur n'est pas connecté et en cliquant sur le bouton de réglage, nous pouvons ouvrir la page de réglage dans mon application.

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

     } 

ici, délégué est votre viewcontroller, si vous utilisez cette méthode dans votre viewcontroller, utilisez simplement self au lieu de delegate.

EDIT: Si vous obtenez des erreurs obsolètes, utilisez plutôt le code compatible iOS6 suivant:

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

tu peux le faire.

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];
                    }
3
Saad

Si vous regardez dans le cadre de Twitter (ce contrôleur de vue Twitter), il a "prefs: root = Twitter" à l'intérieur, 5.1 a également cette ligne. Donc probablement Apple a fait quelque chose pour le désactiver pour d'autres applications, comme une clé spéciale dans plist ou la méthode "openURL" vérifie en quelque sorte si ce n'est pas une application système.

1
artysx