不同的警报视图和viewcontroller

时间:2011-04-01 09:36:39

标签: iphone objective-c uiviewcontroller uialertview code-reuse

在同一个视图控制器中,我必须显示由警报按钮触发的不同操作的不同警报(此视图控制器是警报的代理)。

有没有办法重用警报代码init / show / release,考虑到

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

我需要将警报区分开来。

3 个答案:

答案 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)。