2013-05-29 10 views
5

Ist es möglich, mit SLComposerViewController auf einen Tweet zu antworten? Hat es jemand schon einmal gemacht?Gibt es eine Möglichkeit, über SLComposerViewController auf einen bestimmten Tweet zu antworten

+0

Sie sollten das mit 'SLRequest' machen können. Ich würde lesen https://dev.twitter.com/docs – Desdenova

+1

Dank Sdenova !! Ich schaffte es – holierthanthou84

+0

Kein Problem. Wäre toll für zukünftige Referenz, wenn Sie uns zeigen könnten, wie Sie es getan haben und es als gültige Antwort markieren. – Desdenova

Antwort

1

okay hier wir Goooo. Zuerst müssen wir jedesmal einen SLComposeViewController generieren, wenn eine Antwort-Schaltfläche angetippt wird. Sobald der SLComposeViewController gestartet ist, graben wir tief hinein und suchen nach der Schaltfläche "Senden" und deaktivieren die zugehörige Aktion namens sendButtonTapped:. Nach dem Entfernen der nativen Aktion verknüpfen wir unsere eigene benutzerdefinierte Aktion mit dem sendButton.

Heres der Kodex, das zu tun:

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:^{}]; 
       } 

Jetzt in unserer Custom Action (replyToTweet in meinem Fall): Wir haben die Benutzereingabe Kommentare extrahieren. und dann die ganze Menge an die Twitter-API übergeben. Twitter kümmert sich um den Rest !!

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

-Code der UITextView abzustreifen ist:

- (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: Denken Sie daran, auch die UIButton von SLComposeViewController auszuziehen !!

+1

composeViewsviews ist leer. Ich konnte den Knopfblick nicht bekommen, irgendeine Idee? – ramo

0

Da SLComposeViewController von View Contoller erbt, müssen wir den SLComposeViewcontroller von der UITextView-Eigenschaft entfernen und dessen Inhalt abrufen. Dann übergeben wir die gesammelten Informationen zusammen mit der "in_reply_to_status_id" an die Twitter API. Einfach luftig !! Lass mich wissen, wenn du Hilfe mit Codes brauchst! Spoiler Ich habe es noch nicht implementiert .. aber da ich die Benutzereingaben von SLComposerViewController abrufen konnte, nehme ich an, dass der Rest ein Stück Kuchen sein wird.

Verwandte Themen