在我的应用程序中,我有一个操作表,其中一个按钮以模态方式打开TWTweetComposeViewController。在iPhone模拟器上,推特作曲家的取消按钮工作正常,并解散视图。但是,在iPad模拟器上,取消按钮不起作用,并且推特作曲家视图仍保留在屏幕上。它甚至更奇怪,因为在按下取消按钮后,键盘缩回并且底层视图变为活动状态。它表现得好像视图已经被解除但它仍然存在。
用户按下操作按钮时使用的代码是:
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSString *buttonTitle = [actionSheet buttonTitleAtIndex:buttonIndex];
if ([buttonTitle isEqualToString:@"Open in Safari"]){
[[UIApplication sharedApplication] openURL:[self.webView.request URL]];
}else if ([buttonTitle isEqualToString:@"Twitter"]){
if ([TWTweetComposeViewController canSendTweet]){
TWTweetComposeViewController *tweetSheet = [[TWTweetComposeViewController alloc] init];
[tweetSheet addURL:[self.webView.request URL]];
tweetSheet.completionHandler = ^(TWTweetComposeViewControllerResult result){
if (result == TWTweetComposeViewControllerResultCancelled){
[self dismissModalViewControllerAnimated:YES];
}
};
[self presentModalViewController:tweetSheet animated:YES];
}else {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Twitter error" 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];
}
}
}
您对如何解决此问题有任何想法,还是模拟器的错误?
P.S。:我的应用程序是一个标签栏应用程序,此代码从标签栏的一个视图控制器调用。
答案 0 :(得分:5)
我在实际设备上遇到同样的问题。事实证明这是Apple的TWTweetComposeViewController
SDK中的一个错误。
请参阅OpenRadar上的错误报告:http://openradar.appspot.com/radar?id=1484405。
添加completionHandler块时 TWTweetComposeViewController,完成处理程序需要调用 - [UIViewController dismissModalViewControllerAnimated:],即使tweet作曲家的视图因取消或取消而自行解散 发送按钮。如果不这样做会导致触摸事件无法到达 产生推文作曲家的观点。
只是想我会添加我的工作方式,即使这不符合内存指南,这也是一种解决方法:
[compose setCompletionHandler:^(TWTweetComposeViewControllerResult result){
dispatch_async(dispatch_get_main_queue(), ^{
if(self.delegate != nil)
{
if (result == TWTweetComposeViewControllerResultDone)
{
[self.delegate twitterOperation:TETwitterOperationTweet
completedSuccessfully:YES
withResponseString:@"Tweet Successful"];
}
else if(result == TWTweetComposeViewControllerResultCancelled)
{
[self.delegate twitterOperation:TETwitterOperationTweet
completedSuccessfully:NO
withResponseString:@"Tweet Cancelled"];
}
}
// Dismiss per Apple's Twitter example
[self.shownInViewController dismissViewControllerAnimated:YES
completion:nil];
// Yuck. But it's necessary.
[compose release];
});