我有一个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中它给出了一定的值。
我还检查了迭代到uialertview的子视图。在iOS7中,它进入循环,因为它找到了警报的子视图。在iOS8中,它表示没有alertView的子视图。
答案 0 :(得分:29)
检查班级是否可用
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];
}
答案 1 :(得分:12)
使用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];
答案 2 :(得分:4)
我得到了我的问题的答案。问题是我在我的项目中使用了UIFont + Replacement类别。这在iOS 7上运行良好,但在iOS 8上它使用了一些不推荐使用的方法。因此,我不知道为什么,但只有我的提醒视图没有显示任何标签。
解决方案:从项目中删除类别并通过xib设置字体。一旦我们将任何字体的.tff文件放在我们的项目工作区中,我们就会在自定义字体下的xib中看到这些字体名称。无需使用UIFont +替换类别。
答案 3 :(得分:3)
请仔细阅读以下代码,了解如何将字段和按钮添加到警报中。
- (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];
}

如果您需要一个项目来完全引用IOS中提供的警报类型,请按照以下网址中的项目进行操作:
答案 4 :(得分:2)
在iOS 8中,您需要将UIAletrview
和UIActionSheet
替换为UIAlertcontroller
。您先阅读本文档在apple forum中
Apple Alertcontroller
答案 5 :(得分:1)
您可以检查该代码
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];
}
答案 6 :(得分:0)
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)
答案 7 :(得分:-5)
我认为这不是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];
}