我有UIAlertView
我没有按钮显示。我想在处理一些操作后以编程方式解除它(这是一个“请稍候”警告对话框)。不过,我想解雇它,而不需要UIAlertView
成为财产。
为什么:现在我将警报视图分配给@property - 例如:我正在创建一个类变量。我不觉得它应该这样 - 因为坦率地说,它只在View Controller加载时显示。我认为它以某种方式添加为子视图,我可以在加载完成后从堆栈中弹出它,但这不起作用。
什么:我创建了警告对话框(没有按钮)并显示它。然后我开始处理数据 - 与服务器同步。它只发生过一次并且不常见。但是,其他对象负责同步,并作为观察者模式实现 - 对象本身在加载数据时报告。那是我解雇对话的时候。我只是想避免在对话框中使用@property。
我就是这样做的(简化):
@property (nonatomic, strong) UIAlertView *av;
- (void)setup {
...
[self.av show];
[self loadData];
}
- (void)loadData {
...loading data...
[self.av dismissWithClickedButtonIndex:0 animated:YES];
}
有没有办法解雇它而无需将其“存储”到@property
?
答案 0 :(得分:1)
Blocks保留它们捕获的变量。你可以利用这种行为,但你应该了解你在那里做的事情:
UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Title"
message:@"Message"
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:nil];
[av show];
dispatch_async(dispatch_queue_create("com.mycompany.myqueue", 0), ^{
sleep(5);
dispatch_async(dispatch_get_main_queue(), ^{
[av dismissWithClickedButtonIndex:0 animated:YES];
});
});
sleep(5)
只是模拟你的长期任务。
我没有使用UIAlertView
,而是考虑使用这样的库:https://github.com/jdg/MBProgressHUD