在同一个视图控制器中,我必须显示由警报按钮触发的不同操作的不同警报(此视图控制器是警报的代理)。
有没有办法重用警报代码init / show / release,考虑到
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
我需要将警报区分开来。
答案 0 :(得分:7)
您可以定义一组常量来表示您正在管理的每种不同类型的警报视图。例如:
enum {
MyFirstTypeOfWarning,
MySecondTypeOfWarning
};
typedef NSInteger SPAlertViewIdentifier;
然后,每当您发现需要呈现UIAlertView时,请调用包装init / show show代码并设置UIAlertView标记的方法:
- (void)initializeAndPresentUIAlertViewForWarningType:(SPAlertViewIdentifier)tag {
// Standard alloc/init stuff
[alertView setTag:tag];
[alertView show];
}
然后,在alertView中:clickedButtonAtIndex:您可以检查传入的警报视图的标记并做出相应的响应。
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if ([alertView tag] == MyFirstTypeOfWarning) {
// Process button index for first type of alert.
} ...
}
答案 1 :(得分:4)
您可以在此处获取警报视图
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if([alertView isEqualTo:yourAlertView]) // you can try isEqual:
{
//Do something
}
//Another option is set tags to alertviews and check these tags
// if(alertView.tag == yourAlertView.tag)
//{
//Do something
//}
}
答案 2 :(得分:2)
正是7KV7所说的。您需要标记警报视图,并在事件处理程序中检查发件人的标记是什么。这样,您可以在同一个事件处理程序中为不同的警报视图创建不同的操作(clickedButtonAtIndex)。