我有一个名为AlertView的类,因为我在我的应用程序中使用了很多警报,我想优化我的UIAlertViews的使用。
但是当我希望我的AlertView类响应该方法时,我遇到了一个问题:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
这是UIAlertView在我的AlertView.h中的外观
+ (void)simpleWithMessage:(NSString *)message withTag:(int)tag withOtherBtnTitle:(NSString *)otherBtnTitle;
这就是UIAlertView在我的AlertView.m中的外观。
#pragma mark - Simple alert with tag
+ (void)simpleWithMessageAndTag:(NSString *)message withTag:(int)tag withOtherBtnTitle:(NSString *)otherBtnTitle
{
UIAlertView *simpleWithMessageWithMessageAndTagAlertView = [[UIAlertView alloc] initWithTitle:@"Confirm your choice!"
message:message
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:otherBtnTitle, nil];
simpleWithMessageWithMessageAndTagAlertView.tag = tag;
[simpleWithMessageWithMessageAndTagAlertView show];
}
在另一个类中,我导入了我的AlertView.h,当我调用它时它工作正常:
[AlertView simpleWithMessage:@"Do you want to delete?" withTag:901 withOtherBtnTitle:@"Yes"];
但是我使用的标签没有响应我的AlertView类方法:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
// Button actions for alert view with tag 901
if (alertView.tag == 901) {
if (buttonIndex == 1) {
[self deleteMissionState];
}
}
}
任何人都可以帮助我解决我在这里缺少的东西,或者是否有可能做我想做的事情。
提前致谢!
已编辑:
找到这个帮助我解释单身人士的教程: http://www.youtube.com/watch?v=FTfEN8KQPK8
答案 0 :(得分:3)
问题是您的方法simpleWithMessageAndTag:withTag:WithOtherBtnTitle:
是一个类方法(使用+
而不是-
声明),并且当您指定self
作为其中的委托时方法,类成为委托,而不是类的实例。
同时回调方法alerView:clickedButtonAtIndex:
是一个实例方法(-
而不是+
),因此该类不响应该选择器(该类的对象会)。如果您将-
更改为+
(尽管它违反了UIAlertViewDelegate
协议的文本),它可能会有效:
+ (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
或者,更好的是,将simpleWithMessageAndTag:withTag:WithOtherBtnTitle:
更改为实例方法并创建您调用该方法的类的实例(例如,单例),例如:
[[MyAlertViewFactory sharedFactory] simpleWithMessageAndTag:…];
// sharedFactory returns the same instance of MyAlertViewFactory every time