2012-07-04 10 views
7

in iOS 5.0 i öffnet Twitter Einstellung von meiner App vonöffnen Twitter Einstellung von ACAccountStore (iOS 5.1 TWITTER)

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

aber bietet dieses in iOS entfernt 5.1, daher kann ich nicht in der Lage Öffnen Sie die Twitter-Einstellung.

Jetzt bin ich mit

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

}]; 

}

für diesen Antrag gestellt, ich bin in der Lage zu überprüfen, ob ich in oder nicht von der

if ([TWTweetComposeViewController canSendTweet])

bin loged aber jetzt i want: Wenn ich nicht angemeldet bin, würde ich eine Warnung wie im Bild gezeigt anzeigen und möchte zur Twitter-Einstellung wechseln. ist es möglich ? oder muss ich manuell auf twitter setzen? enter image description here

Antwort

17

Es ist ein wenig schwierig, bekomme ich durch das Entfernen der Unteransichten in *TWTWeetComposeViewController*, so zeigt es nur Alarm, wenn Benutzer nicht eingeloggt ist und durch den Klick auf Einstellung, können wir Einstellungsseite in meiner App öffnen.

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

    } 

hier deleate ist Ihr Viewcontroller, wenn Sie diese Methode in Ihrem Viewcontroller sind nur mit self statt delegate verwenden.

+1

Wie zu vermeiden, erscheint der Tastatur in der obigen Logik – ShivaPrasad

+0

@jeeva ich denke, Tastatur nicht angezeigt wird, oder wenn es dann nur Textview oder Textfield von (UIView * anzeigen in tweetViewController.viewnviews) { } und machen resitFirstResponder . – PJR

+0

Wenn Sie nach etwas suchen, das in iOS 6.0+ funktioniert, ist die Antwort [unten] (http://stackoverflow.com/questions/11325266/open-twitter-setting-from-acaccountstore-ios-5-1-twitter/13293846 # 13293846) hat super funktioniert. –

8

iOS 6 verwendet SLComposeViewController statt TWTweetComposeViewController, so jetzt müssen Sie dies tun, wenn Sie es wünschen 5 auf iOS 6 und iOS zu arbeiten:

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]; 
+0

Diese Methode funktioniert gut, aber wenn ich zu meiner App zurückkehre, ist immer noch ein schwarzer Schatten auf dem Bildschirm. Es ist der Hintergrund, der angezeigt wird, wenn die Warnanzeige zum Senden eines Benutzers an die Einstellungen nicht entfernt wird. Hast du etwas getan, um das zu vermeiden? – Aitul

+0

Hmm, nein, ich habe dieses Problem nicht. Die [view removeFromSuperview] -Aufrufe sollten alle von ihnen loswerden. Können Sie die Ansichtshierarchie überprüfen, um zu sehen, was noch angezeigt wird? – Senior

+2

Hatte das gleiche Problem mit dem schwarzen Schatten - die Reste des UIViewController, die vorgestellt wurde, nehme ich an. Umgehe das, indem ich die beiden obigen Vorkommen von // durch was auch immer du willst mit [self entlassenViewControllerAnimated: NO completion: nil]; Jetzt funktioniert es gut. – n13

1

Aufbauend auf Seniors und PJR der oben genannten Antworten, das ist, was hat für mich gearbeitet.

Wie Senior, außer mit einem DimissViewController im Completion-Handler. Bei mir ging das um das Problem herum, dass der leere View-Controller nach der Rückkehr aus den Einstellungen in die App stecken bleiben würde. Es würde meinen View-Controller überlagern und unbrauchbar machen.

Brilliante Lösung, danke Senior und 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]; 
0

die Post Ansicht zu entfernen, stattdessen mit diesem Code:

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

Verwendung dieses:

tweetComposer.view.alpha = 0; 

Werke sowohl für Twitter und Facebook.