我有一塊一塊的Twitter共享代碼,對iOS6的正常工作,但我需要的應用程序很好地回落到iOS5的太...iOS6 - 社會框架 - SLComposeViewController如何回退到iOS5的TWTweetComposeViewController?
它看起來像這樣:
- (void) shareOnTwitter
{
if([SLComposeViewController instanceMethodForSelector:@selector(isAvailableForServiceType)] != nil)
{
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
{
NSLog(@"twitter available");
SLComposeViewController *composeViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
[composeViewController setInitialText:self.sharingText];
[self.sharingController presentViewController:composeViewController animated:YES completion:nil];
}
else
{
NSLog(@"twitter not available!");
}
}
else
{
// SLComposeViewController not available, this is most likely <iOS6, what to do here?
}
}
SO,我如何在iOS5中很好地回退(我假設我需要TWTweetComposeViewController),以便我可以在iOS5中使用本地Twitter?
編輯: 最後,我仍然懶於回退到TWTweetComposeViewController,所以我決定簡單地回退:iOS6原生tweet - >已安裝的twitter應用程序 - > web網址。 這是我放在一起的功能,希望它可以幫助別人:
+(BOOL)isSocialFrameworkAvailable
{
// whether the iOS6 Social framework is available?
return NSClassFromString(@"SLComposeViewController") != nil;
}
- (void) shareOnTwitterWithText:(NSString*)text andURL:(NSString*)url andImageName:(NSString*)imageName
{
// prepare the message to be shared
NSString *combineMessage = [NSString stringWithFormat:@"%@ %@", text, url];
NSString *escapedMessage = [combineMessage stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSString *appURL = [NSString stringWithFormat:@"twitter://post?message=%@", escapedMessage];
if([SocialManager isSocialFrameworkAvailable] && [SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
{
// user has setup the iOS6 twitter account
SLComposeViewController *composeViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
[composeViewController setInitialText:text];
if([UIImage imageNamed:imageName])
{
[composeViewController addImage:[UIImage imageNamed:imageName]];
}
if(url)
{
[composeViewController addURL:[NSURL URLWithString:url]];
}
[self.sharingController presentViewController:composeViewController animated:YES completion:nil];
}
else
{
// else, we have to fallback to app or browser
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:appURL]])
{
// twitter app available!
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:appURL]];
}
else
{
// worse come to worse, open twitter page in browser
NSString *web = [NSString stringWithFormat:@"https://twitter.com/intent/tweet?text=%@", escapedMessage];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:web]];
}
}
}
謝謝克里斯!你的答案向我證實,我需要包含我現在最新的Xcode版本中沒有的Twitter框架..我需要得到它..謝謝! – mkto
@chris你可以在iOS6中使用TWTweetComposeViewController嗎?或者在iOS6中使用SLComposeViewController有什麼好處? –
我不知道是否有優勢,我敢打賭'SLComposeViewController'只是封裝了'TWTweetComposeViewController'。另外,我可以想象蘋果最終會棄用'TWTweetComposeViewController'而轉而使用'SLComposeViewController'。 – chris