IOS 7では完全に表示されるUIAlertViewがありますが、iOS 8ではボタンやラベルが表示されません。アラートは表示されたままですが、小さな白いボックスが表示されます。 [OK]ボタンと[キャンセル]ボタンもイベントを受け取りますが、テキストは表示されません。
このアラートを使用して、ボタンのクリック時に表示しました
- (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のサブビューはないという。
私は自分の問題に対する答えを得ました。問題は、プロジェクトでUIFont + Replacementカテゴリを使用していたことです。これはiOS 7では正常に機能していましたが、iOS 8では非推奨のメソッドをほとんど使用していませんでした。このため、理由はわかりませんが、アラートビューにのみラベルが表示されませんでした。
解決策:プロジェクトからカテゴリを削除し、xibを介してフォントを設定しました。プロジェクトワークスペースに任意のフォントの.tffファイルを配置すると、xibのカスタムフォントの下にそれらのフォント名が表示されます。 UIFont + Replacementカテゴリを使用する必要はありません。
クラスが利用可能かどうかを確認します
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];
}
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];
以下のコードを読んで、アラートにフィールドとボタンを追加する方法を理解してください。
- (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で利用可能なアラートのタイプを完全に参照するプロジェクトが必要な場合は、以下のURLから私のプロジェクトに従ってください。
iOS 8では、UIAletrview
とUIActionSheet
をUIAlertcontroller
に置き換える必要があります。このドキュメントを最初に読むAppleフォーラム
Apple Alertcontroller
そのコードを確認できます
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];
}