目前,我们的代码设置为从 UITextField 中获取文本作为 setInitialText 获取Facebook / Twitter帖子。
我们想要做的是:在Facebook / Twitter帖子中添加额外的永久消息或URL。
我们怎么做?这是我们当前的代码:
[slComposeThirdViewController setInitialText:[[self QText]text]];
[self presentViewController:slComposeThirdViewController animated:YES completion:nil];
答案 0 :(得分:3)
这有点牵扯,所以请耐心等待...... 这只适用于SLServiceTypeTwitter
对于有兴趣使用此功能的读者,我在Github上放了一个示例项目:https://github.com/NSPostWhenIdle/Immutable-SLComposeViewController
首先要确保视图控制器符合UITextViewDelegate
。您还需要为UITextView
创建iVar。您实际上不会创建文本视图,但是您需要一个指针直接指向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进行了比较,这是我们分配给作曲家内部文本视图的指针。这样做将允许您在此控制器中使用其他文本视图,而不会遵循我为作曲家内部的文本视图配置的相同规则。
- (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;
}
希望这有帮助!
答案 1 :(得分:2)
您可以滚动自己的作曲家,附加文字,然后使用SLRequest将其实际提交给服务。
答案 2 :(得分:1)
如何从UITextField捕获用户输入的文本,然后构建一个最终字符串,从中附加您想要的永久消息?
UITextField *textField;
NSString *enteredText = [textField text];
NSString *finalPost = [NSString stringWithFormat:@"%@ Your permanent text/URL", enteredText];
现在将“finalPost”字符串发布到Facebook或Twitter。
答案 3 :(得分:0)
如果要使用URL附加文本,只需使用addURL:方法即可。它不会在SLComposeViewController的视图中显示任何文本。但是在发布用户推文后会在最后添加URL。
SLComposeViewController *slComposeThirdViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
[slComposeThirdViewController setInitialText:@"initial Text"];
[slComposeThirdViewController addURL:[NSURL URLWithString:@"http://stackoverflow.com/"]];