为什么clickedButtonAtIndex方法甚至是在UIActionSheet的外面调用?

时间:2014-03-13 06:39:06

标签: ios iphone objective-c cocoa-touch uiactionsheet

正如我的标题所说的那样clickedButtonAtIndex委托方法即使在UIActionSheet的外面也可以调用。
点击UIButton时会显示我的actionSheet。 我UIActionSheet声明的代码。

-(void)btnComplexityTapped:(UIButton *) sender
{
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Select your complexity" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Easy", @"Medium", @"High", nil];
    [actionSheet showFromRect:sender.frame inView:self.view animated:YES];
    [actionSheet release];
}

在委托方法中

- (void)actionSheet:(UIActionSheet *)myActionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if(buttonIndex == 0)
    {
        [self.btnComplexity setTitle:@"Easy" forState:UIControlStateNormal];
    }
    else if(buttonIndex == 1)
    {
        [self.btnComplexity setTitle:@"Medium" forState:UIControlStateNormal];
    }
    else
    {
        [self.btnComplexity setTitle:@"High" forState:UIControlStateNormal];
    }
}

我知道通过在委托方法中设置最后一个条件来设置else if(buttonIndex == 1)而不是else来解决此问题。但我不想应用任何修复,但我想知道为什么委托方法被调用,即使我没有点击UIActionSheet

的任何按钮

观看此视频,了解更清晰的图片。

enter image description here

如上所述,按钮的默认标题是" Medium"当我点击按钮然后actionSheet打开然后我点击actionSheet的一边(比如self.view)然后调用委托方法clickedButtonAtIndex,这样最后else条件变为真,那就是这样我的按钮标题已更改"高"。

任何人都可以告诉我为什么会这样吗?

2 个答案:

答案 0 :(得分:4)

在iPad中,动作表以弹出窗口显示。没有取消按钮,因为触摸弹出窗口相当于触摸取消。因此,您的代理人会收到消息,就好像已触摸取消按钮一样。

答案 1 :(得分:1)

因为它显示在{{1>}( iPad )中,而ActionSheet上没有取消按钮。如果您点击ActionSheet,则会触发POPOVER