2012-03-09 16 views
35

Sembra che iOS 5.1 abbia infranto la codifica URL standard per la navigazione di un utente verso una preferenza.Come aprire le preferenze/impostazioni con iOS 5.1?

Ad esempio:

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

Lavori in iOS 5.0, ma non in iOS 5.1 (sia del dispositivo e simulatore).

Qualcuno ha trovato un modo per replicare questa funzionalità in iOS 5.1?

+0

Wow, Apple si è affrettato a rimuovere quella ... Hai provato ricevendo l'Info.plist di l'app Impostazioni e controlla se ci sono schemi di URL registrati? – fbernardo

+1

Ho aperto la finestra Preferences.plist. Sembra che abbiano rimosso il valore per kPreferencePositionKey (che era prefs: ...). Vedo diverse nuove chiavi (WebDatabaseDirectory, WebKitLocalStoreDatabasePathPreferenceKey, AutomaticMinimizationEnabled e UserDictionarySampleShortcutsAdded). Alcuni di questi sembrano interessanti, ora la parte divertente è da dove cominciare. –

+0

AutomaticMinimization sembra davvero divertente ... – fbernardo

risposta

11

No, non conosco un modo per replicare questa funzionalità.

Ma quello che puoi fare è depositare un Radar che richiede il restauro. Here is a radar richiedendo che gli schemi siano documentati in primo luogo.

David Barnard ha confermato che iOS 5.1 interrompe gli schemi URL delle impostazioni delle app.


Aggiornamento: iOS 8 has similar functionality per aprire le impostazioni della app. Grazie Apple, Mike e Soto_iGhost.

La costante UIApplicationOpenSettingsURLString (UIApplication Documentation) aprirà le impostazioni per l'app e non, ad esempio le impostazioni di Twitter. Non esattamente la stessa funzionalità ma molto più pulita di prima e ora ufficialmente riconosciuta.

Questo dovrebbe essere ancora più utile ora che ogni app ha un posto in Impostazioni per l'utilizzo della privacy, dati cellulari, aggiornamento delle app in background e notifiche.

+0

Grazie per la risposta. Questo è un grosso problema, non sono sicuro del perché Apple abbia sentito la necessità di rimuovere questa funzionalità. –

+1

Queste non sono davvero buone notizie. Lo abbiamo usato anche per un client all'interno di un'app aziendale. – axooh

+0

Sembra funzionare ancora se il pulsante è in un avviso, ma non un pulsante normale nell'interfaccia utente – zambono

1

Se si guarda nel framework di Twitter (quel controller di visualizzazione Twitter), ha "prefs: root = TWITTER" all'interno, 5.1 ha anche questa linea. Quindi probabilmente Apple ha fatto qualcosa per disabilitarlo per altre app, come alcune chiavi speciali in plist o il metodo "openURL" controlla in qualche modo se non è un'app di sistema.

3

puoi farlo.

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

Bel lavoro :) ma non è tornato all'app dopo aver effettuato l'accesso all'account Twitter anche l'avviso è ancora lì :( – Zubair

+0

puoi inserire il codice qui? – Saad

+0

vedere il collegamento http://facebook.stackoverflow.com/questions/14950678/calling-uialertview-clickedbutton-at-index-programatically – Zubair

13

E 'po' difficile, io vengo dal rimuovendo le subviews in *TWTWeetComposeViewController*, in modo che mostra solo avviso quando l'utente non è loggate e dal clic sul pulsante di regolazione, siamo in grado di aprire la pagina Impostazioni nella mia app.

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

    } 

qui, delegato è il vostro viewcontroller, se si utilizza questo metodo all'interno del vostro viewcontroller basta usare self invece di delegate.

EDIT: Se ottieni errori deprecato, utilizzare il seguente codice compatibile iOS6 invece:

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

Questa è l'unica soluzione funzionante che ho trovato! Grazie! –

+0

@EduardoCobuci sei riuscito a rimuovere la casella tweet in background? Vedo le impostazioni/cancella l'avviso ma c'è un Tweet Box sul retro, come lo rimuoviamo? – Jatin

Problemi correlati