这有点牵扯,所以请耐心等待……这仅适用于 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;
}
希望这可以帮助!