IOS 8: UIAlertView/UIAlertController, не отображающий текст или кнопки
У меня есть UIAlertView, который отлично отображается в iOS 7, но в iOS 8 он не показывает никаких кнопок или ярлыков. Предупреждение по-прежнему видно, но только маленькая белая коробка.
Кнопки "ОК" и "Отмена" также принимают свои события, но не отображаются тексты.
Я использовал это предупреждение для показа по щелчку кнопки
- (IBAction)sel_btnLogout:(id)sender {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Logout!" message:@"Are you sure you want to logout?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
[alert show];
}
Я проверил фрейм в iOS 8: он дает (0,0,0,0), но в iOS 7 он дает определенное значение.
Я также проверил для итерации в subviews uialertview. В iOS7 он идет в цикле, поскольку он обнаруживает оповещения о бдительности. В iOS8 говорится, что нет никаких подзонов alertView.
Ответы
Ответ 1
Я получил ответ на свой вопрос. Проблема заключалась в том, что я использовал модель UIFont + Replacement в своем проекте. Это отлично работало на iOS 7, но на iOS 8 использовалось несколько устаревших методов. Из-за этого я не знаю, почему, но только мое предупреждение не показывало никаких ярлыков.
Решение. Удалил категорию из проекта и установил шрифт через xib. Когда мы помещаем файл .tff любого шрифта в рабочую область проекта, мы видим эти имена шрифтов в xib под пользовательскими шрифтами. НЕТ НУЖНО ИСПОЛЬЗОВАТЬ UIFont + Категория замены.
Ответ 2
Проверьте, доступен ли класс
if ([UIAlertController class])
{
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Alert title" message:@"Alert message" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
[alertController addAction:ok];
[self presentViewController:alertController animated:YES completion:nil];
}
else
{
UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"Alert title" message:@"Alert message" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
}
Ответ 3
С iOS 8 вы можете установить заголовок вместо сообщения:
[[[UIAlertView alloc] initWithTitle:@"AlertView in iOS 8." message:nil delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]show];
UIAlertView устарел от iOS 8 для получения дополнительной информации.
http://nshipster.com/uialertcontroller/.
https://developer.apple.com/LIBRARY/IOS/documentation/UIKit/Reference/UIAlertViewDelegate_Protocol/index.html
Итак, если вы собираетесь писать отдельный код для iOS 7 и iOS 8, вместо этого вы должны использовать UIAlertController:
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"AlertView in iOS 8" message:nil preferredStyle:UIAlertControllerStyleAlert];
[alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
[self dismissViewControllerAnimated:YES completion:nil];
}]];
[self presentViewController:alertController animated:YES completion:nil];
Ответ 4
Прочитайте приведенный ниже код, чтобы понять, как добавлять поля и кнопки к предупреждениям.
- (IBAction)UIAlertControllerWithActionSheetTextFields:(id)sender {
UIAlertController * alert= [UIAlertController
alertControllerWithTitle:@"Info"
message:@"You are using UIAlertController with Actionsheet and text fields"
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* ok = [UIAlertAction
actionWithTitle:@"OK"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
NSLog(@"Resolving UIAlert Action for tapping OK Button");
[alert dismissViewControllerAnimated:YES completion:nil];
}];
UIAlertAction* cancel = [UIAlertAction
actionWithTitle:@"Cancel"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
NSLog(@"Resolving UIAlertActionController for tapping cancel button");
[alert dismissViewControllerAnimated:YES completion:nil];
}];
[alert addAction:ok];
[alert addAction:cancel];
[alert addTextFieldWithConfigurationHandler:^(UITextField * textField) {
textField.accessibilityIdentifier = @"usernameTextField";
textField.placeholder = @"Enter your username";
textField.accessibilityLabel = @"usernameLabel";
}];
[alert addTextFieldWithConfigurationHandler:^(UITextField * textField) {
textField.placeholder = @"Enter your password";
textField.accessibilityIdentifier = @"paswordTextField";
textField.accessibilityLabel = @"passwordLabel";
}];
[self presentViewController:alert animated:YES completion:nil];
}
Ответ 5
в iOS 8 вам нужно заменить UIAletrview
и UIActionSheet
на UIAlertcontroller
. Сначала вы читаете эту документацию на форуме Apple
Apple Alertcontroller
Ответ 6
Вы можете проверить этот код
if (([[[UIDevice currentDevice] systemVersion] compare:@"8.0" options:NSNumericSearch] == NSOrderedAscending))
{
// use UIAlertView
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:Title message:desc delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alert show];
}
else {
// use UIAlertController
UIAlertController *alert = [UIAlertController alertControllerWithTitle:Title message:desc preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
}];
[alert addAction:okAction];
[self presentViewController:alert animated:YES completion:nil];
}
Ответ 7
let alert = UIAlertController(title: "Warning" as String , message: messageString as String, preferredStyle: .Alert)
let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default)
{
UIAlertAction in
self.dismissViewControllerAnimated(true, completion: nil)
}
// Add the actions
alert.addAction(okAction)
self.presentViewController(alert, animated: true, completion: nil)
Ответ 8
Я думаю, что это не проблема UIAlertview
.
пожалуйста, проверьте эту работу хорошо..
Я думаю, что ваши проблемы с кодом...........
в любом view controller
введите этот код в viewDidLoad
Как показано ниже:
- (void)viewDidLoad
{
[super viewDidLoad];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"My message" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
[alert show];
}