È possibile rispondere a un tweet utilizzando SLComposerViewController? Qualcuno l'ha già fatto prima?C'è un modo per rispondere a un particolare tweet tramite SLComposerViewController
risposta
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 !!
composeView.subviews è vuoto. non potevo avere la vista del pulsante, qualche idea? – ramo
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
Si dovrebbe essere in grado di farlo con 'SLRequest'. Avrei letto https://dev.twitter.com/docs – Desdenova
Grazie Desdenova !! L'ho gestito – holierthanthou84
Nessun problema. Sarebbe bello per riferimento futuro se potessi mostrarci come lo hai fatto e contrassegnarlo come risposta valida. – Desdenova