我试图以编程方式调用UIAlertView的委托方法。这是代码:
if([vc respondsToSelector:@selector(alertView:clickedButtonAtIndex:)]) {
// Manually invoke the alert view button handler
[(id <UIAlertViewDelegate>)vc alertView:nil
clickedButtonAtIndex:0];
}
它在iOS5.0上工作正常,但不适用于iOS6.0,欢迎评论或建议:)
以下是详细的完整方法:
TWTweetComposeViewController *vc = [[[TWTweetComposeViewController alloc] init]autorelease];
// Settin The Initial Text
[vc setInitialText:status];
[vc setCompletionHandler:^(TWTweetComposeViewControllerResult result) {
if(result == TWTweetComposeViewControllerResultDone) {
NSLog(@"Tweeted Sucessfully");
}
}];
if([delegate isKindOfClass:[UIViewController class]]){
[(UIViewController *)delegate presentModalViewController:vc animated:YES];
}
//alertView:clickedButtonAtIndex:
if([vc respondsToSelector:@selector(alertView:clickedButtonAtIndex:)]) {
// Manually invoke the alert view button handler
[(id <UIAlertViewDelegate>)vc alertView:nil
clickedButtonAtIndex:0];
}
}
在您的代码中,只需使用您的uialertview对象名称提供警报视图,如下图所示。
[(id <UIAlertViewDelegate>)vc alertView:yourAlertView
clickedButtonAtIndex:0];
否则试试这个波纹管代码..
id<UIAlertViewDelegate> delegate = yourAlertView.delegate;
yourAlertView.delegate = nil;
[delegate alertView:yourAlertView clickedButtonAtIndex:0];
有关它的其他选项,请参阅此链接..
why-doesnt-dismisswithclickedbuttonindex-ever-call-clickedbuttonatindex
直接调用委托方法是不好的做法。 UIAlertView
有一种叫做dismissWithClickedButtonIndex:animated:
的方法。如果你这样称呼,那么将调用UIAlertViewDelegate
方法alertView:willDismissWithButtonIndex:
和alertView:didDismissWithButtonIndex:
,假设您的委托设置正确。
您可以使用此委托,这将为您工作..
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex;
在iOS 6中实现警报视图没有这些差异。您可以使用此委托方法轻松完成任务 - :
(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex;
试试这个,然后让我们知道你在控制台中得到什么样的警告......
在IOS6中不推荐使用TWTeetComposeViewController。请尝试使用DETweet。 :)也适用于iOS 6。 :)