【问题标题】:Is there a way of replying to a particular tweet via SLComposerViewController有没有办法通过 SLComposeViewController 回复特定的推文
【发布时间】:2013-05-24 18:57:06
【问题描述】:

是否可以使用 SLComposerViewController 回复推文?有人做过吗?

【问题讨论】:

  • 您应该可以使用SLRequest 做到这一点。我会读dev.twitter.com/docs
  • 谢谢德斯德诺瓦!!我成功了
  • 没问题。如果您能向我们展示您是如何做到的并将其标记为有效答案,那将非常适合将来参考。

标签: iphone twitter


【解决方案1】:

好的,我们goooo。首先,我们需要在每次点击回复按钮时生成一个 SLComposeViewController。启动 SLComposeViewController 后,我们深入研究它并搜索“发送”按钮并禁用名为 sendButtonTapped: 的关联操作。在剥离原生操作后,我们将我们自己的自定义操作关联到 sendButton。

这是执行此操作的代码:

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

现在在我们的自定义操作中(在我的例子中为 replyToTweet):我们提取用户输入 cmets。然后将所有这些传递给 Twitter API。 Twitter 会处理剩下的事情!

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

剥离 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:记得把 SLComposeViewController 的 UIButton 也去掉!!

【讨论】:

  • composeView.subviews 为空。我无法获得按钮视图,知道吗?
【解决方案2】:

由于 SLComposeViewController 继承自 View Contoller,我们需要将 SLComposeViewcontroller 剥离到它的 UITextView 属性并获取其内容。然后我们将收集到的信息与"in_reply_to_status_id" 一起传递给Twitter API。轻松活泼的!!如果您需要代码方面的帮助,请让我知道!剧透 我还没有实现它.. 但由于我能够从 SLComposerViewController 检索用户输入,我认为其余的将是小菜一碟

【讨论】:

    猜你喜欢
    • 2020-10-11
    • 2019-09-28
    • 2021-09-27
    • 2011-09-19
    • 1970-01-01
    • 2015-01-13
    • 2012-04-02
    • 2019-09-03
    • 2011-03-12
    相关资源
    最近更新 更多