7

iOS 5.0 では、アプリから Twitter の設定を開いていました。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=TWITTER"]];

しかし、この機能は iOS 5.1 で削除されたため、twitter の設定を開くことができません。

今私は使用しています

 + (void)makeRequestsWithURL: (NSURL *)url {
// Create an account store object.
ACAccountStore *accountStore = [[ACAccountStore alloc] init];

// Create an account type that ensures Twitter accounts are retrieved.
ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
[self canTweetStatus];

// Request access from the user to use their Twitter accounts.
[accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
    if(granted) {
        // Get the list of Twitter accounts.
        NSArray *accountsArray = [accountStore accountsWithAccountType:accountType];

        // For the sake of brevity, we'll assume there is only one Twitter account present.
        // You would ideally ask the user which account they want to tweet from, if there is more than one Twitter account present.
        if ([accountsArray count] > 0) {
            // Grab the initial Twitter account to tweet from.
            ACAccount *twitterAccount = [accountsArray objectAtIndex:0];


            // Create a request, which in this example, posts a tweet to the user's timeline.
            // This example uses version 1 of the Twitter API.
            // This may need to be changed to whichever version is currently appropriate.
            TWRequest *postRequest = [[TWRequest alloc] initWithURL:url parameters:nil requestMethod:TWRequestMethodPOST];

            // Set the account used to post the tweet.
            [postRequest setAccount:twitterAccount];

            // Perform the request created above and create a handler block to handle the response.
            [postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
                NSString *output = [NSString stringWithFormat:@"HTTP response status: %i", [urlResponse statusCode]];
                iOS5Twitter *twitter5 = [[iOS5Twitter alloc] init];
                [twitter5 performSelectorOnMainThread:@selector(displayText:) withObject:output waitUntilDone:NO];
                [twitter5 release];                }];
        }
    }

}];

}

リクエストを行うために、ログインしているかどうかを

if ([TWTweetComposeViewController canSendTweet])

しかし、今私が欲しいのは、ログインしていない場合、画像に示されているようなアラートが表示され、Twitter設定に移動したいということです。出来ますか ?または、Twitter の設定を手動で行う必要がありますか?ここに画像の説明を入力

4

4 に答える 4

17

少しトリッキーですが、サブビューを削除することで取得できる*TWTWeetComposeViewController*ため、ユーザーがログインしていないときにのみアラートが表示され、設定ボタンをクリックすると、アプリで設定ページを開くことができます。

     + (void)setAlertForSettingPage :(id)delegate 
    {
     // Set up the built-in twitter composition view controller.
        TWTweetComposeViewController *tweetViewController = [[TWTweetComposeViewController alloc] init];


        // Create the completion handler block.
        [tweetViewController setCompletionHandler:^(TWTweetComposeViewControllerResult result) {
            [delegate dismissModalViewControllerAnimated:YES];
        }];

        // Present the tweet composition view controller modally.
        [delegate presentModalViewController:tweetViewController animated:YES];
        //tweetViewController.view.hidden = YES;
        for (UIView *view in tweetViewController.view.subviews){
            [view removeFromSuperview];
        }

     } 

ここで、 deleate はビューコントローラーです。ビューコントローラー内でこのメソッドを使用している場合は、self代わりにdelegate.

于 2012-07-04T12:49:51.657 に答える
8

iOS 6 は TWTweetComposeViewController の代わりに SLComposeViewController を使用するため、iOS 6 および iOS 5 で動作させるには、これを行う必要があります。

    UIViewController *tweetComposer;

    if([SLComposeViewController class] != nil)
    {
        tweetComposer = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];

        [(SLComposeViewController *)tweetComposer setCompletionHandler:^(SLComposeViewControllerResult result)
         {
            // do whatever you want
         }];
    }
    else
    {
        tweetComposer = [[TWTweetComposeViewController alloc] init];

        [(TWTweetComposeViewController *)tweetComposer setCompletionHandler:^(TWTweetComposeViewControllerResult result)
         {
            // do whatever you want
         }];
    }

    for (UIView *view in [[tweetComposer view] subviews])
        [view removeFromSuperview];

    [self presentViewController:tweetComposer animated:NO completion:nil];
于 2012-11-08T16:56:35.227 に答える
1

上記のシニアとPJRの回答に基づいて、これが私にとってうまくいきました。

完了ハンドラーに dimissViewController があることを除いて、Senior のものと同じです。私にとって、これは、設定からアプリに戻った後、空のView Controllerが固執するという問題を回避しました。それは私のView Controllerをオーバーレイし、役に立たなくします。

すばらしい解決策です。Senior と PJR に感謝します。

UIViewController *tweetComposer;

if([SLComposeViewController class] != nil)
{
    tweetComposer = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];

    [(SLComposeViewController *)tweetComposer setCompletionHandler:^(SLComposeViewControllerResult result)
     {
            [self dismissViewControllerAnimated:NO completion:nil];
     }];
}
else
{
    tweetComposer = [[TWTweetComposeViewController alloc] init];

    [(TWTweetComposeViewController *)tweetComposer setCompletionHandler:^(TWTweetComposeViewControllerResult result)
     {
           [self dismissViewControllerAnimated:NO completion:nil];

     }];
}

for (UIView *view in [[tweetComposer view] subviews])
    [view removeFromSuperview];

[self presentViewController:tweetComposer animated:NO completion:nil];
于 2013-03-11T15:34:55.287 に答える
0

投稿ビューを削除するには、代わりに次のコードを使用します。

for (UIView *view in [[tweetComposer view] subviews])
    [view removeFromSuperview];

これを使って:

tweetComposer.view.alpha = 0;

ツイッターとフェイスブックの両方で機能します。

于 2013-09-09T05:16:15.997 に答える