1

現在、コードはUITextFieldからFacebook/Twitter 投稿のsetInitialTextとしてテキストを取得するように設定されています。

私たちがやりたいことは、追加の永続的なメッセージまたは URL を Facebook/Twitter の投稿に追加することです。

どうすればこれを行うことができますか?現在のコードは次のとおりです。

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

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

4 に答える 4

3

少し複雑なので、ここで我慢してください...これは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;
}

お役に立てれば!

于 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 に答える