少し複雑なので、ここで我慢してください...これはSLServiceTypeTwitterでのみ機能します
これを読んでいて、これを使用することに興味がある人のために、サンプル プロジェクトを Github に置きました: https://github.com/NSPostWhenIdle/Immutable-SLComposeViewController
最初に行うことは、View Controller が に準拠していることを確認することですUITextViewDelegate
。の iVar も作成する必要があり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 と比較したことにも気付くでしょう。そうすることで、コンポーザー内のテキスト ビュー用に構成したのと同じ規則に従わなくても、このコントローラー内で他のテキスト ビューを使用できるようになります。
- (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;
}
お役に立てれば!