Вы можете изменить цвет кнопки, применив цвет оттенка к UIAlertController.
На iOS 9, если цвет оттенка окна был установлен на пользовательский цвет, вам необходимо применить цвет оттенка сразу после представляя предупреждение. В противном случае цвет оттенка будет сброшен до вашего цвета оттенка пользовательского окна.
// In your AppDelegate for example:
window?.tintColor = UIColor.redColor()
// Elsewhere in the App:
let alertVC = UIAlertController(title: "Title", message: "message", preferredStyle: .Alert)
alertVC.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
alertVC.addAction(UIAlertAction(title: "Ok", style: .Default, handler: nil))
// Works on iOS 8, but not on iOS 9
// On iOS 9 the button color will be red
alertVC.view.tintColor = UIColor.greenColor()
self.presentViewController(alert, animated: true, completion: nil)
// Necessary to apply tint on iOS 9
alertVC.view.tintColor = UIColor.greenColor()
Ну, я записал часть кода, вдохновленного многими вышеупомянутыми ответами, которые должны легко работать в большинстве сценариев, куда сервер отправляет файл с заголовком расположения содержания, без любых сторонних установок, кроме rxjs и угловой.
Первый, как назвать код из Вашего файла
this.httpclient.get(
`${myBackend}`,
{
observe: 'response',
responseType: 'blob'
}
).pipe(first())
.subscribe(response => SaveFileResponse(response, 'Custom File Name.extension'));
компонента, Как Вы видите, это - в основном в значительной степени средний вызов бэкенда от углового, с двумя изменениями
, После того как файл выбирается с сервера, я в принципе, делегируя всю задачу того, чтобы сохранить файл к функции помощника, которую я сохраняю в отдельном файле и импорте в то, какой бы ни компонент мне нужно к
export const SaveFileResponse =
(response: HttpResponse<Blob>,
filename: string = null) =>
{
//null-checks, just because :P
if (response == null || response.body == null)
return;
let serverProvidesName: boolean = true;
if (filename != null)
serverProvidesName = false;
//assuming the header is something like
//content-disposition: attachment; filename=TestDownload.xlsx; filename*=UTF-8''TestDownload.xlsx
if (serverProvidesName)
try {
let f: string = response.headers.get('content-disposition').split(';')[1];
if (f.includes('filename='))
filename = f.substring(10);
}
catch { }
SaveFile(response.body, filename);
}
//Create an anchor element, attach file to it, and
//programmatically click it.
export const SaveFile = (blobfile: Blob, filename: string = null) => {
const a = document.createElement('a');
a.href = window.URL.createObjectURL(blobfile);
a.download = filename;
a.click();
}
Там, никакие более загадочные имена файлов GUID! Мы можем использовать любое имя, которое сервер обеспечивает, не имея необходимость указывать его явно в клиенте, или, перезаписывать имя файла, обеспеченное сервером (как в этом примере). Кроме того, можно легко, если потребуется, изменить алгоритм извлечения имени файла от довольного расположения для удовлетворения их потребностям, и все остальное останется незатронутым - в случае ошибки во время такого извлечения, это просто передаст 'пустой указатель' как имя файла.
Как другой ответ, на который уже указывают, IE нужен некоторый специальный режим, как всегда. Но с краем хрома, прибывающим через несколько месяцев, я не волновался бы об этом при создании новых приложений (надо надеяться). Существует также вопрос отмены URL, но я - вид not-so-sure об этом, поэтому если бы кто-то мог бы выручить с этим в комментариях, которые были бы потрясающими.