2013-05-29 10 views
5

È possibile rispondere a un tweet utilizzando SLComposerViewController? Qualcuno l'ha già fatto prima?C'è un modo per rispondere a un particolare tweet tramite SLComposerViewController

+0

Si dovrebbe essere in grado di farlo con 'SLRequest'. Avrei letto https://dev.twitter.com/docs – Desdenova

+1

Grazie Desdenova !! L'ho gestito – holierthanthou84

+0

Nessun problema. Sarebbe bello per riferimento futuro se potessi mostrarci come lo hai fatto e contrassegnarlo come risposta valida. – Desdenova

risposta

1

okay we goooo. Per prima cosa dobbiamo generare un SLComposeViewController ogni volta che viene toccato un pulsante di risposta. Una volta avviato SLComposeViewController, lo scaviamo in profondità e cerchiamo il pulsante "invia" e disabilitiamo l'azione associata denominata sendButtonTapped:. Dopo aver rimosso l'azione nativa, associamo la nostra azione personalizzata a sendButton.

Heres il codice per farlo:

if([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) 
       { 
        userTypedTweet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; 
        [userTypedTweet setInitialText:[NSString stringWithFormat:@"%@",authorName]]; 
        sendButton = [self tweetSendButton:userTypedTweet.view]; 
        NSLog(@"%@",sendButton); 
        NSArray * actions = [sendButton actionsForTarget:userTypedTweet forControlEvent:UIControlEventTouchUpInside]; 
        for (NSString * action in actions) 
        if([action isEqualToString:@"sendButtonTapped:"]) 
         [sendButton removeTarget:userTypedTweet action:NSSelectorFromString(action) forControlEvents:UIControlEventTouchUpInside]; 
        [sendButton addTarget:self action:@selector(replyToTheTweet) forControlEvents:UIControlEventTouchUpInside]; 
        [self presentViewController:userTypedTweet animated:YES completion:^{}]; 
       } 

Ora nella nostra azione personalizzata (replyToTweet nel mio caso): estraiamo i commenti di input dell'utente. e quindi passare tutti quelli all'API di Twitter. Twitter si prenderà cura di tutto il resto !!

-(void)replyToTheTweet 
{ 
    SingletonClass *myAccount= [SingletonClass sharedobject]; 
    UITextView * textView = [self tweetTextView:self.userTypedTweet.view]; 
    NSLog(@"we have the value :%@",textView.text); 
    NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init]; 
     [parameters setObject:[myAccount.currentTweet objectForKey:@"id_str"] forKey:@"in_reply_to_status_id"]; 
     [parameters setObject:textView.text forKey:@"status"]; 
    SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodPOST URL:[NSURL URLWithString:@"https://api.twitter.com/1.1/statuses/update.json"] parameters:parameters]; 
NSLog(@"%@",request.parameters); 
    [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { 
    if (responseData) 
     { 
      NSError *parseError = nil; 
      id json = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&parseError]; 
      if (!json) 
       NSLog(@"Parse Error: %@", parseError); 
      else 
      { 
       UIAlertView *alertOK = [[UIAlertView alloc] initWithTitle:@"Successful" message:@"Tweet was succesfully replied to" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
       dispatch_async(dispatch_get_main_queue(), ^{[alertOK show];}); 
      } 
    } 
    else 
    { 
    NSLog(@"Request Error: %@", [error localizedDescription]); 
    } 
    }]; 
    [self.userTypedTweet dismissViewControllerAnimated:YES completion:nil]; 
} 

codice per mettere a nudo l'UITextView è:

- (UITextView *)tweetTextView:(UIView *)view 
    { 
     for (UIView * subview in view.subviews) 
     { 
      if ([subview isMemberOfClass:[UITextView class]]) 
       return (UITextView *)subview; 
      UITextView * textView = [self tweetTextView:subview]; 
      if (textView) return textView; 
     } 
     return nil; 
    } 

IMP: ricordarsi di smontare l'UIButton di SLComposeViewController pure !!

+1

composeView.subviews è vuoto. non potevo avere la vista del pulsante, qualche idea? – ramo

0

Poiché SLComposeViewController eredita da View Contoller, è necessario rimuovere il SLComposeViewcontroller dalla proprietà UITextView e recuperarne il contenuto. Quindi passiamo le informazioni raccolte all'API di Twitter insieme allo "in_reply_to_status_id". Facile ventoso !! Fammi sapere se hai bisogno di aiuto con i codici! Spoiler non l'ho ancora implementato .. ma dato che sono stato in grado di recuperare l'input dell'utente da SLComposerViewController, suppongo che il resto sarà un pezzo di torta

Problemi correlati