-->

从ACAccountStore(iOS的5.1 TWITTER)打开的Twitter设置(Open

2019-06-26 00:36发布

在安装iOS 5.0我是从我的应用程序打开Twitter的设置

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

但是,这个功能在IOS 5.1被移除,因此我不能能开叽叽喳喳设置。

我现在用的

 + (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];                }];
        }
    }

}];

}

用于制造要求,我能够请检查是否我被loged或不

if ([TWTweetComposeViewController canSendTweet])

但现在我想:如果我没有在这loged会显示一个警告像显示在图像和要移动到Twitter的设置。 可能吗 ? 或者我需要手动去TI Twitter的设置?

Answer 1:

这是有点棘手,我得到中的去除子视图*TWTWeetComposeViewController* ,因此它显示,只有当用户通过设定按钮的点击不loged,我们可以在我的应用程序打开设置页面的警报。

     + (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是你的ViewController,如果您使用的是里面的ViewController这种方法只使用self的,而不是delegate



Answer 2:

iOS 6中使用SLComposeViewController代替TWTweetComposeViewController,所以现在你有,如果你想让它在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];


Answer 3:

建立在高级的和PJR的回答以上,这是对我工作。

同高级的,除非在完成处理程序dimissViewController。 对于我这个传开后,我回到了从设置应用程序的空视图控制器将坚持解决问题。 这将覆盖我的视图控制器,使之无用。

辉煌的解决方案,由于高级和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];


Answer 4:

要卸下后视图,而不是使用此代码:

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

用这个:

tweetComposer.view.alpha = 0;

无论是Twitter和Facebook的作品。



文章来源: Open Twitter Setting from ACAccountStore (iOS 5.1 TWITTER)