正如我的标题所说的那样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
观看此视频,了解更清晰的图片。
如上所述,按钮的默认标题是" Medium"当我点击按钮然后actionSheet打开然后我点击actionSheet的一边(比如self.view
)然后调用委托方法clickedButtonAtIndex
,这样最后else
条件变为真,那就是这样我的按钮标题已更改"高"。
任何人都可以告诉我为什么会这样吗?
答案 0 :(得分:4)
在iPad中,动作表以弹出窗口显示。没有取消按钮,因为触摸弹出窗口相当于触摸取消。因此,您的代理人会收到消息,就好像已触摸取消按钮一样。
答案 1 :(得分:1)
因为它显示在{{1>}( iPad )中,而ActionSheet上没有取消按钮。如果您点击ActionSheet,则会触发POPOVER
。