1

现在,我们的代码设置为从UITextField中获取文本作为Facebook/Twitter 帖子的setInitialText

我们要做的是:在 Facebook/Twitter 帖子中添加额外的永久消息或 URL。

我们应该怎么做?这是我们当前的代码:

[slComposeThirdViewController setInitialText:[[self QText]text]];

[self presentViewController:slComposeThirdViewController animated:YES completion:nil];
4

4 回答 4

3

这有点牵扯,所以请耐心等待……这仅适用于 SLServiceTypeTwitter

对于任何有兴趣使用它的人,我在 Github 上放了一个示例项目:https ://github.com/NSPostWhenIdle/Immutable-SLComposeViewController

您要做的第一件事是确保您的视图控制器符合UITextViewDelegate. 您还需要为UITextView. 您实际上不会创建文本视图,但您需要有一个指针直接分配给SLComposeViewController. 当您在这里时,也为永久字符串制作一个 iVar。

@interface ViewController : UIViewController <UITextViewDelegate> //very important!
{
    UITextView *sharingTextView;
    NSString *permanentText;
}

然后在 viewDidLoad 你可以设置你想要的永久文本:

- (void)viewDidLoad
{
    [super viewDidLoad];
    permanentText = @"http://www.stackoverflow.com/";
}

下面的代码是IBAction向作曲家展示一些细微调整的基本代码。首先,您会注意到setInitialText使用格式化字符串将永久文本附加到文本字段内容的末尾,并在其间添加一个空格。

然后是重要的部分!我在presentViewController:的完成处理程序中添加了一个循环,以循环遍历子视图的子视图的一些子视图,以便UITextView在包含共享文本的作曲家中识别。这需要完成,以便您可以设置该文本视图的委托以访问UITextViewDelegate方法shouldChangeTextInRange

- (IBAction)exampleUsingFacebook:(UIButton *)sender {

    if([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
    {
        SLComposeViewController *sharingComposer = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];

        SLComposeViewControllerCompletionHandler __block completionHandler=^(SLComposeViewControllerResult result){
            [sharingComposer dismissViewControllerAnimated:YES completion:nil];
        };
        [sharingComposer setCompletionHandler:completionHandler];
        [sharingComposer setInitialText:[NSString stringWithFormat:@"%@ %@",[[self QText]text],permanentText]];

        [self presentViewController:sharingComposer animated:YES completion:^{
            for (UIView *viewLayer1 in sharingComposer.view.subviews) {
                for (UIView *viewLayer2 in viewLayer1.subviews) {
                    if ([viewLayer2 isKindOfClass:[UIView class]]) {
                        for (UIView *viewLayer3 in viewLayer2.subviews) {
                            if ([viewLayer3 isKindOfClass:[UITextView class]]) {
                                [(UITextView *)viewLayer3 setDelegate:self];
                                sharingTextView = (UITextView *)viewLayer3;
                            }
                        }
                    }
                }
            }
        }];
    }
}

重要提示:请注意,上述内容在放置在完成处理程序中时才有效。

下面是一个示例,说明如何设置shouldChangeTextInRange以将用户尝试编辑的范围与包含您的永久文本的范围进行比较。通过这样做,用户将能够对他们想要的文本的任何部分进行更改......除了包含您的永久文本的部分。您还会注意到,在此方法中,我将 textView 与 shareingTextView 进行了比较,这是我们分配给 composer 内部文本视图的指针。这样做将允许您在此控制器中使用其他文本视图,而无需遵循我为 Composer 中的文本视图配置的相同规则。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if (textView == sharingTextView) {
        NSRange substringRange = [textView.text rangeOfString:permanentText];
        if (range.location >= substringRange.location && range.location <= substringRange.location + substringRange.length) {
            return NO;
        }
    }
    return YES;
}

希望这可以帮助!

于 2012-12-06T04:36:21.190 回答
2

您可以滚动自己的作曲家,附加您的文本,然后使用 SLRequest 将其实际提交给服务。

于 2013-02-11T02:31:10.143 回答
1

如何从 UITextField 捕获用户输入的文本,然后构造一个最终字符串,该字符串附加您想要的永久消息?

UITextField *textField;
NSString *enteredText = [textField text];
NSString *finalPost = [NSString stringWithFormat:@"%@ Your permanent text/URL", enteredText];

现在将“finalPost”字符串发布到 Facebook 或 Twitter。

于 2012-11-20T16:53:13.280 回答
0

如果你想用 URL 附加文本,只需使用 addURL: 方法。它不会在 SLComposeViewController 的视图中显示任何文本。但在发布用户推文后会在末尾添加 URL。

SLComposeViewController *slComposeThirdViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
[slComposeThirdViewController setInitialText:@"initial Text"];
[slComposeThirdViewController addURL:[NSURL URLWithString:@"http://stackoverflow.com/"]];
于 2013-08-30T10:11:02.807 回答