是否可以使用标签访问UIAlertView?

时间:2011-01-03 06:49:13

标签: iphone tags uialertview

我希望使用标签访问UIAlertView。代码如下所示

UIAlertView *a=(UIAlertView *)[self.view  viewWithTag:presetTag]; 

但是a不返回任何对象(0x0)

我希望找到一种方法来获取显示的UIAlertView对象的指针,而不是在显示它的UIViewController类中创建对它的引用。我正在创建UIAlertView并为其标记属性分配一个常量非零值,然后通过show显示它并释放UIAlertView引用。

这可能派上用场的一个例子是,如果我想隐藏基于未触及警报视图上某个按钮的其他事件的警报视图。假设服务器通知应用程序警报不再有效,因此我在警报视图上使用按钮索引-1解除。但是,我没有提到那个警报,所以我怎么能找到它呢?

欢迎任何评论

由于

InterDev中

4 个答案:

答案 0 :(得分:4)

由于UIAlertView不是应用程序视图层次结构的一部分,因此访问它的唯一方法是在创建实例后立即存储实例,例如在字典中,以便以后可以检索它。

类似的东西:

UIStateAlertView *alert = [[UIStateAlertView alloc]
                           initWithTitle:@"my_message"
                           message:nil
                           delegate:self
                           cancelButtonTitle:@"Cancel"
                           otherButtonTitles: nil];
alert.tag = kMY_TAG;
[_alertIndex setObject:alert forKey:[NSNumber numberWithInt:kMy_TAG]];
[alert show];
[alert release];

检索警报:

UIAlertView *alert = [_alertIndex objectForKey:[NSNumber numberWithInt:kMy_TAG]];

完成视图后,请务必将其从字典中删除:

[_alertIndex removeObjectForKey:[NSNumber numberWithInt:kMy_TAG]];

_alertIndex是NSMutableDictionary

iPhone SDK: check if a UIAlertView is showing提供了一个解决方案,但这取决于Apple如何处理其内部事务,并且可能随时中断;所以应该避免

答案 1 :(得分:2)

UIAlertView创建了自己的UIWindow,它不是应用程序UIView的主要层次结构的一部分。因此,无法使用[UIView viewWithTag:]找到它。

您必须将指针存储到您创建的UIAlertView,以便稍后再次找到它们。

有一种方法可以在您的应用中访问UIAlertView(然后您可以使用标签来验证它是您正在寻找的那个),但它依赖于应用的内部结构和因此可能会停止在iOS的未来版本中工作,尽管不太可能。如果您有兴趣,请see this other SO response

答案 2 :(得分:-1)

我认为有可能,请检查您是否为标记设置非零值

答案 3 :(得分:-2)

这是你需要的吗?具体而言,您可以通过协议回调方法中的标记属性访问每个UIAlertView的标记信息。

@protocol UIAlertViewDelegate <NSObject>
@optional

// Called when a button is clicked. The view will be automatically dismissed after this call returns
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;

// Called when we cancel a view (eg. the user clicks the Home button). This is not called when the user clicks the cancel button.
// If not defined in the delegate, we simulate a click in the cancel button
- (void)alertViewCancel:(UIAlertView *)alertView;

- (void)willPresentAlertView:(UIAlertView *)alertView;  // before animation and showing view
- (void)didPresentAlertView:(UIAlertView *)alertView;  // after animation

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex; // before animation and hiding view
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex;  // after animation

@end