如何通过隐藏SLComposeViewController * tweetSheettweet实例在Twitter上发布 [英] How to post on twitter by hiding SLComposeViewController *tweetSheettweet instance
问题描述
我的应用程序需要支持iOS 5.
My app needs to support iOS 5.
我有我的自定义用户界面,用户可以输入推文消息,当他按下发布按钮时,它应该发布消息twitter。
I have my custom UI where user can enter tweet message and when he presses post button, It should post message twitter.
我已经编写了通过SLComposeViewController发布的代码* tweetSheet实例
但是在这种情况下我无法直接按tweetSheet提供的发送按钮而不显示
I have already written code for posting via SLComposeViewController *tweetSheet instance but in this case i cannot directly press send button presented by tweetSheet without presenting it by
[self presentViewController:tweetSheet animated:YES completion:nil];
是否可以绕过此演示文稿并设置短信并通过我的自定义ui发布到Twitter发布按钮??
Is it possible to bypass this presentation and set text message and post to twitter via my custom ui which has post button ??
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
{
SLComposeViewController *tweetSheet = [SLComposeViewController
composeViewControllerForServiceType:SLServiceTypeTwitter];
tweetSheet.completionHandler = ^(SLComposeViewControllerResult result) {
switch(result) {
// This means the user cancelled without sending the Tweet
case SLComposeViewControllerResultCancelled:
NSLog(@"Tweet message was cancelled");
break;
// This means the user hit 'Send'
case SLComposeViewControllerResultDone:
NSLog(@"Done pressed successfully");
break;
}
// dismiss the Tweet Sheet
dispatch_async(dispatch_get_main_queue(), ^{
[self dismissViewControllerAnimated:NO completion:^{
NSLog(@"Tweet Sheet has been dismissed.");
}];
});
};
[tweetSheet setInitialText:self.textViewPostedText.text];
[self presentViewController:tweetSheet animated:YES completion:nil];
}
如果用户拥有多个Twitter帐户,如何提供选项?
How to give select option if user have multiple Twitter accounts ???
推荐答案
- (IBAction)doneButtonClicked:(id)sender
{
ACAccountStore *account = [[ACAccountStore alloc] init];
ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
NSString *message = _textView.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
}
in below
// 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]; //hear this line replace with selected account. than post it :)
//Build a twitter request
TWRequest *postRequest = [[TWRequest alloc] initWithURL:
[NSURL URLWithString:@"https://api.twitter.com/1.1/statuses/update.json"]
parameters:[NSDictionary dictionaryWithObject:message forKey:@"status"] requestMethod:TWRequestMethodPOST];//for iOS 7
//for iOS 6 use "https://api.twitter.com/1/statuses/update.json"
//Post the request
//u should get the response code 200 for successful post
[postRequest setAccount:acct];
//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];
}
}];
[postRequest 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:@"Permission not granted" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
} ];
[account release]; //for non-ARC
}
这篇关于如何通过隐藏SLComposeViewController * tweetSheettweet实例在Twitter上发布的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!