为什么UIAlertView在用户通过点击按钮响应之前不会阻塞?

时间:2014-08-26 17:04:25

标签: objective-c ios7 uialertview uialertviewdelegate

在我的iOS 7应用中,我需要验证用户是否要从Cord Data中删除所选记录。我在.h文件中定义了UIAlertViewDelegate。这是显示警报的代码:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning"
                                                message:@"Are you sure you want to delete this record?"
                                               delegate:self
                                      cancelButtonTitle:@"Cancel"
                                      otherButtonTitles:@"Delete", nil];
[alert show];

if(alertButtonTapped == 0)
    return;

//  remainder of code to delete record follows (was omitted)

这是检查点击了哪个按钮的代码:

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

alertButtonTapped = [NSNumber numberWithInteger:buttonIndex];
return;
}

问题是显示警报,然后立即落入该方法中的其余代码。我以前从未见过这个;通常它会阻塞,直到用户通过点击其中一个按钮做出响应(至少我认为它确实如此)。在用户响应之前,我需要做什么来制作此警报块? (我正在查看UIAlertView块,但不确定是否可以完成这项工作,因为它似乎使用了不同的线程)

1 个答案:

答案 0 :(得分:4)

这就是UIAlertView的工作方式 - 它不会阻止,因此它有UIAlertViewDelegate方法来实际实现响应。

如果“代码的剩余部分”是点击按钮后发生的事情(例如“删除”按钮),则将所有代码移动到委托方法中,如:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex  {  
    if (buttonIndex != alertView.cancelButtonIndex) {
        // code to delete record
    }
}

编辑 - 添加示例以回复评论

因此,如果您在同一个班级中有多个UIAlertView,则可以使用tag的{​​{1}}属性区分它们(UIView is-a {{1 }})。所以它可能是这样的:

UIAlertView

然后您的委托回复可能如下所示:

UIView