2009-12-30 65 views
0

我正试图对警报上按下的任何按钮进行操作。我有下面的代码和第一个警报弹出窗口,但它永远不会到第二个。UIAlertView问题

我已经设置了它,以便在标题中定义UIAlertViewProtocol。

-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
    if(buttonIndex != [actionSheet cancelButtonIndex]) 
    { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Something actually happened" message:@"Something was done" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"test",nil]; 
     [alert show]; 

    } 

} 

    -(void)alert:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if(buttonIndex ==0) 
    { 
     NSLog(@"tetetete"); 
     UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"test" message:@"test" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [a show]; 
     [a release]; 
     [alert release];  
    } 

} 

回答

1

最简单的解释是代理设置不正确。将调试器设置为 if(buttonIndex ==0)以确保调用委托方法。或者,按钮索引可能不是零,因此第二个警报从不创建。调试器也可以检查。

你应该招行...

[警报发布];

...第一种方法。

我从来没有试过菊花链这样的警报。理论上它是由于警报是模态的并附加到窗口而不是顶部视图,因此您无法添加第二个警报,直到第一个警报从窗口中完全删除为止。如果窗口仅仅释放警报,如果原始对象尚未释放它,它可能会保留在窗口的属性中。保留视图直到显示第二个视图之后,可能会在窗口对象中造成某种碰撞。

1

我已经修改了你的代码检查

-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
    if(buttonIndex != [actionSheet cancelButtonIndex]) 
    { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Something actually happened" message:@"Something was done" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"test",nil]; 
     [alert show]; 
     [alert release]; 

    } 

} 

    -(void)alert:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if(buttonIndex ==0) 
    { 
     NSLog(@"tetetete"); 
     UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"test" message:@"test" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [a show]; 
     [a release]; 
     [a release];  
    } 

}