2012-07-04 24 views
7

en IOS 5.0 que estaba abriendo ajuste de Twitter desde mi aplicación porAbrir Twitter Configuración de ACAccountStore (IOS 5.1 TWITTER)

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

pero, esta características se retira en IOS 5.1, por lo tanto no puede capaz de abrir configuración de twitter

Ahora estoy usando

+ (void)makeRequestsWithURL: (NSURL *)url { 
// Create an account store object. 
ACAccountStore *accountStore = [[ACAccountStore alloc] init]; 

// Create an account type that ensures Twitter accounts are retrieved. 
ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter]; 
[self canTweetStatus]; 

// Request access from the user to use their Twitter accounts. 
[accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) { 
    if(granted) { 
     // Get the list of Twitter accounts. 
     NSArray *accountsArray = [accountStore accountsWithAccountType:accountType]; 

     // For the sake of brevity, we'll assume there is only one Twitter account present. 
     // You would ideally ask the user which account they want to tweet from, if there is more than one Twitter account present. 
     if ([accountsArray count] > 0) { 
      // Grab the initial Twitter account to tweet from. 
      ACAccount *twitterAccount = [accountsArray objectAtIndex:0]; 


      // Create a request, which in this example, posts a tweet to the user's timeline. 
      // This example uses version 1 of the Twitter API. 
      // This may need to be changed to whichever version is currently appropriate. 
      TWRequest *postRequest = [[TWRequest alloc] initWithURL:url parameters:nil requestMethod:TWRequestMethodPOST]; 

      // Set the account used to post the tweet. 
      [postRequest setAccount:twitterAccount]; 

      // Perform the request created above and create a handler block to handle the response. 
      [postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { 
       NSString *output = [NSString stringWithFormat:@"HTTP response status: %i", [urlResponse statusCode]]; 
       iOS5Twitter *twitter5 = [[iOS5Twitter alloc] init]; 
       [twitter5 performSelectorOnMainThread:@selector(displayText:) withObject:output waitUntilDone:NO]; 
       [twitter5 release];    }]; 
     } 
    } 

}]; 

}

para realizar solicitudes, soy capaz de verificar wether estoy Usuario o no por el

if ([TWTweetComposeViewController canSendTweet])

pero ahora Quiero: si no me registran, se mostrará una alerta como se muestra en la imagen y quiero pasar a la configuración de Twitter. Es posible ? o tengo que hacer manualmente la configuración de twitter? enter image description here

Respuesta

17

Es un poco complicado, obtengo la eliminación de las subvistas en *TWTWeetComposeViewController*, por lo que muestra solo alerta cuando el usuario no está conectado y haciendo clic en el botón de configuración, podemos abrir la página Configuración en mi aplicación.

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

    } 

aquí, deleate es su viewcontroller, si está utilizando este método dentro de su viewcontroller sólo tiene que utilizar self en lugar de delegate.

+1

Cómo evitar aparición de teclado en la lógica anterior – ShivaPrasad

+0

@jeeva i piense en el teclado no se muestra o si es simplemente encontrar TextView o campo de texto por (UIView * vista en tweetViewController.view.subviews) {} y hacer que resignFirstResponder . – PJR

+0

Si está buscando algo que funcione en iOS 6.0+ la respuesta [a continuación] (http://stackoverflow.com/questions/11325266/open-twitter-setting-from-acaccountstore-ios-5-1-twitter/13293846 # 13293846) funcionó muy bien. –

8

iOS 6 utiliza SLComposeViewController en lugar de TWTweetComposeViewController, por lo que ahora hay que hacer esto si quieres que funcione en iOS 6 y iOS 5:

UIViewController *tweetComposer; 

    if([SLComposeViewController class] != nil) 
    { 
     tweetComposer = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; 

     [(SLComposeViewController *)tweetComposer setCompletionHandler:^(SLComposeViewControllerResult result) 
     { 
      // do whatever you want 
     }]; 
    } 
    else 
    { 
     tweetComposer = [[TWTweetComposeViewController alloc] init]; 

     [(TWTweetComposeViewController *)tweetComposer setCompletionHandler:^(TWTweetComposeViewControllerResult result) 
     { 
      // do whatever you want 
     }]; 
    } 

    for (UIView *view in [[tweetComposer view] subviews]) 
     [view removeFromSuperview]; 

    [self presentViewController:tweetComposer animated:NO completion:nil]; 
+0

este método funciona bien, pero cuando regreso a mi aplicación todavía hay una sombra negra en la pantalla. Es el fondo que aparece cuando la vista de alerta para enviar al usuario a Configuración no se elimina. Hiciste algo para evitar esto? – Aitul

+0

Hmm, no, no tengo ese problema. Las llamadas [view removeFromSuperview] deberían deshacerse de todas ellas. ¿Puedes inspeccionar la jerarquía de vistas para ver lo que todavía se muestra? – Senior

+2

Tuve el mismo problema con la sombra negra: los restos del UIViewController que se presentó, supongo. Entendí eso reemplazando las dos ocurrencias anteriores de // haga lo que quiera con [self dismissViewControllerAnimated: NO completion: nil]; Ahora funciona bien. – n13

1

Sobre la base de Senior y PJR de las respuestas anteriores, esto es lo trabajó para mi.

Igual que Senior, excepto con un dimissViewController en el controlador de finalización. Para mí, esto solucionó el problema de que el controlador de vista vacío se quedaría después de que volviera a la aplicación desde la configuración. Superpondría mi controlador de vista y lo haría inútil.

Solución brillante, gracias Senior y PJR.

UIViewController *tweetComposer; 

if([SLComposeViewController class] != nil) 
{ 
    tweetComposer = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; 

    [(SLComposeViewController *)tweetComposer setCompletionHandler:^(SLComposeViewControllerResult result) 
    { 
      [self dismissViewControllerAnimated:NO completion:nil]; 
    }]; 
} 
else 
{ 
    tweetComposer = [[TWTweetComposeViewController alloc] init]; 

    [(TWTweetComposeViewController *)tweetComposer setCompletionHandler:^(TWTweetComposeViewControllerResult result) 
    { 
      [self dismissViewControllerAnimated:NO completion:nil]; 

    }]; 
} 

for (UIView *view in [[tweetComposer view] subviews]) 
    [view removeFromSuperview]; 

[self presentViewController:tweetComposer animated:NO completion:nil]; 
0

Para quitar la vista posterior, en lugar de utilizar este código:

for (UIView *view in [[tweetComposer view] subviews]) 
    [view removeFromSuperview]; 

uso esto:

tweetComposer.view.alpha = 0; 

obras tanto para twitter y facebook.

Cuestiones relacionadas