鸣叫,而不使用鸣叫表

我正在使用下面的代码通过twitter共享内容(从UITextViewUIImageView

 -(void)shareViaTweet:(NSString *)shareMessage{ if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) { SLComposeViewController *tweetSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; [tweetSheet setInitialText:[NSString stringWithFormat:@"%@",shareMessage]]; if (self.imageString) { [tweetSheet addImage:[UIImage imageNamed:self.imageString]]; } if (self.urlString) { [tweetSheet addURL:[NSURL URLWithString:self.urlString]]; } [self presentViewController:tweetSheet animated:YES completion:nil]; } else { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Sorry" message:@"You can't send a tweet right now, make sure your device has an internet connection and you have at least one Twitter account setup" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alertView show]; } } 

但我需要分享这个,而不使用popup视图(我认为推特表)。 这是因为下面的代码,

 [self presentViewController:tweetSheet animated:YES completion:nil]; 

当我点击“分享”我的应用程序的button,我需要在Twitter中发布。

编辑:

 - (IBAction)doneButtonClicked:(id)sender { ACAccountStore *account = [[ACAccountStore alloc] init]; ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter]; NSString *message = messageTextView.text; //hear before posting u can allow user to select the account NSArray *arrayOfAccons = [account accountsWithAccountType:accountType]; for(ACAccount *acc in arrayOfAccons) { NSLog(@"%@",acc.username); //in this u can get all accounts user names provide some UI for user to select,such as UITableview } NSURL *url = [NSURL URLWithString:@"https://api.twitter.com" @"/1.1/statuses/user_timeline.json"]; NSDictionary *params = @{@"screen_name" : message, @"forKey":@"status", @"trim_user" : @"1", @"count" : @"1"}; // Request access from the user to access their Twitter account [account requestAccessToAccountsWithType:accountType options:nil completion:^(BOOL granted, NSError *error) { if (granted == YES) { // Populate array with all available Twitter accounts NSArray *arrayOfAccounts = [account accountsWithAccountType:accountType]; if ([arrayOfAccounts count] > 0) { //use the first account available ACAccount *acct = [arrayOfAccounts objectAtIndex:0]; //hear this line replace with selected account. than post it :) SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodPOST URL:url parameters:params]; //Post the request [request setAccount:acct]; //manage the response [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { if(error) { //if there is an error while posting the tweet UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Twitter" message:@"Error in posting" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; } else { // on successful posting the tweet NSLog(@"Twitter response, HTTP response: %i", [urlResponse statusCode]); UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Twitter" message:@"Successfully posted" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; } }]; } else { UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Twitter" message:@"You have no twitter account" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; } } else { //suppose user not set any of the accounts UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Twitter" message:@"Permission not granted" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; } } ]; //[widgetsHandler closeWidget:nil]; //[self postImage:shareImageView.image withStatus:messageTextView.text]; } 

更新:错误

在这里输入图像说明

发送图像,你需要做这样的事情

  [account requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) { if (granted == YES) { // Populate array with all available Twitter accounts NSArray *arrayOfAccounts = [account accountsWithAccountType:accountType]; if ([arrayOfAccounts count] > 0) { //use the first account available ACAccount *acct = [arrayOfAccounts objectAtIndex:0]; //create this request SLRequest *postRequest = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodPOST URL:[NSURL URLWithString:@"https://api.twitter.com"@"/1.1/statuses/update_with_media.json"] parameters: [NSDictionary dictionaryWithObject:message forKey:@"status"]]; UIImage *imageToPost = [UIImage imageNamed:@"image.jpg"]; NSData *imageData = UIImageJPEGRepresentation(imageToPost, 1.0f);//set the compression quality [postRequest addMultipartData:imageData withName:@"media" type:@"image/jpeg" filename:@"image.jpg"]; //set account and same as above code .... .... 

如果你想分享推文而不使用推特表,看看我的答案,它会在Twitter墙上发布,而不使用推特表,看到听到并设置在设备上的Twitter帐户。 希望这可以帮助

不幸的是TWRequest类在iOS 6中被弃用,但是我们也可以在Social框架中使用SLRequest

答案是这样的旧回答我注释了一些我不想要的,但如果你想select使用哪个帐户然后取消注释评论的代码

  - (IBAction)doneButtonClicked:(id)sender { ACAccountStore *account = [[ACAccountStore alloc] init]; ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter]; NSString *message = _textView.text; // NSArray *arrayOfAccons = [account accountsWithAccountType:accountType]; // for(ACAccount *acc in arrayOfAccons) // { // NSLog(@"%@",acc.username); // NSDictionary *properties = [acc dictionaryWithValuesForKeys:[NSArray arrayWithObject:@"properties"]]; // NSDictionary *details = [properties objectForKey:@"properties"]; // NSLog(@"user name = %@",[details objectForKey:@"fullName"]); // NSLog(@"user_id = %@",[details objectForKey:@"user_id"]); // } // Request access from the user to access their Twitter account [account requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) { if (granted == YES) { // Populate array with all available Twitter accounts NSArray *arrayOfAccounts = [account accountsWithAccountType:accountType]; if ([arrayOfAccounts count] > 0) { //use the first account available ACAccount *acct = [arrayOfAccounts objectAtIndex:0]; // Build a twitter request // TWRequest *postRequest = [[TWRequest alloc] initWithURL: // [NSURL URLWithString:@"http://api.twitter.com/1/statuses/update.json"] parameters:[NSDictionary dictionaryWithObject:message forKey:@"status"] requestMethod:TWRequestMethodPOST]; //commented the deprecated method of TWRequest class SLRequest *postRequest = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodPOST URL:[NSURL URLWithString:@"http://api.twitter.com/1/statuses/update.json"] parameters:[NSDictionary dictionaryWithObject:message forKey:@"status"]]; //use this method instead //Post the request [postRequest setAccount:acct];//set account //manage the response [postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { if(error) { //if there is an error while posting the tweet UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Twitter" message:@"Error in posting" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; [alert release]; } else { // on successful posting the tweet NSLog(@"Twitter response, HTTP response: %i", [urlResponse statusCode]); UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Twitter" message:@"Successfully posted" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; [alert release]; } }]; } else { UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Twitter" message:@"You have no twitter account" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; [alert release]; } } else { //suppose user not set any of the accounts UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Twitter" message:@"You have no twitter account" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; [alert release]; } } ]; [account release]; }