我在我的应用上遇到UIAlertController问题,现在已迁移到iOS8,其中包含日期选择器。
以下是代码。
UIAlertController *AlertView = [UIAlertController alertControllerWithTitle:title message:nil preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction *ok = [UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action)
{
[AlertView dismissViewControllerAnimated:YES completion:nil];
}];
UIAlertAction *set = [UIAlertAction actionWithTitle:NSLocalizedString(@"Set to today", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action)
{
[self set_to_today:nil];
[AlertView dismissViewControllerAnimated:YES completion:nil];
[self.tableView reloadData];
}];
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action)
{
[AlertView dismissViewControllerAnimated:YES completion:nil];
}];
UIDatePicker *datePicker = [[[UIDatePicker alloc] init] autorelease];
datePicker.datePickerMode = UIDatePickerModeDate;
[datePicker setDate:data_appo];
[datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
[AlertView.view addSubview:datePicker];
[AlertView addAction:ok];
[AlertView addAction:set];
[AlertView addAction:cancel];
[self.view bringSubviewToFront:datePicker];
[self presentViewController:AlertView animated:YES completion:nil];
当用户从UITableViewController中选择一行时,会显示UIAlertController和Date Picker。
问题如下: 第一次用户选择行一切正常...但如果用户选择"取消"然后再次选择de tate UIAlertController需要2-3秒才能显示......这也发生在模拟器中......
我疯了......这使我的应用程序的用户体验不佳。
我们非常感谢您的帮助 感谢
亚历
答案 0 :(得分:85)
通过从UITableView中选择一行,我遇到了与UIAlertController相同的问题。第一次一切正常,然后当用户再次触发警报时,在实际发出警报之前有几秒钟的延迟。
作为一种解决方法,我使用了GCD:
dispatch_async(dispatch_get_main_queue(), ^{
[self presentViewController:AlertView animated:YES completion:nil];
});
这可能是一个错误,因为-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
已经在主线程上执行了。
我向Apple提交了一个错误报告:rdar://19285091
答案 1 :(得分:23)
DispatchQueue.main.async {
self.present(alertView, animated: true, completion:nil)
}
Swift 3.0版。或者,设置animated:false也解决了我的问题。