在我的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块,但不确定是否可以完成这项工作,因为它似乎使用了不同的线程)
答案 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