Help us understand the problem. What is going on with this article?

【Xcode】UIAlertView → UIAlertController

先日書いた
【XCode:警告ログ】UIAlertView is deprecated.
の記事には書きましたが UIAlertView → UIAlertController に切り替えに困る人がいるんじゃないかなというところでいくつか考えてみました

iOS__UIAlertView.h

iOS__UIAlertView.h
#import <UIKit/UIKit.h>

@class iOS8__UIAlertView;
/// UIAlertViewDelegate の以降用
@protocol iOS8__UIAlertViewDelegate

- (void)iOS8__alertView:(iOS8__UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;

@end

@interface iOS8__UIAlertView : UIViewController <iOS8__UIAlertViewDelegate>

@property (retain,nonatomic) NSString *message;

/// UIAlertViewDelegate の以降用
@property (assign,nonatomic) id<iOS8__UIAlertViewDelegate>delegate;
@property (assign,nonatomic) NSInteger cancelButtonIndex;

+ (void)iOS__alert;

iOS__UIAlertView.m

iOS__UIAlertView.m
#import "iOS8__UIAlertView.h"

/// ここ、(AppDelegate)を利用する理由はのちにわかります。
#import "AppDelegate.h"

@interface iOS8__UIAlertView ()

/// ボタンの一覧をプライベートのパラメーターを用意
@property (retain,nonatomic) NSArray *alertButtons;

@end

@implementation iOS8__UIAlertView

/// サンプル用のアラート
+ (void)iOS__alert {
    /// 変更箇所
    /// UIAlertView *alert = [[iOS8__UIAlertView alloc]
    iOS8__UIAlertView *alert = [[iOS8__UIAlertView alloc] initWithTitle:@"タイトル"
                                                    message:@"メッセージ"
                                                   delegate:self
                                          cancelButtonTitle:@"キャンセル"
/// 変更箇所
///                                          otherButtonTitles:@"ボタン1", @"ボタン2", @"ボタン3",nii];
                                          otherButtonTitles:@[@"ボタン1", @"ボタン2", @"ボタン3"]];

    [alert show];
}

- (instancetype)initWithTitle:(NSString *)title
                      message:(NSString *)message
                     delegate:(id)delegate
            cancelButtonTitle:(NSString *)cancelButtonTitle
            otherButtonTitles:(NSArray *)otherButtonTitles {
    self = [super init];
    if (self) {
        self.title = title;
        self.message = title;
        self.delegate = delegate;
        // self.cancelButtonTitle = cancelButtonTitle;
        // self.otherButtonTitles = otherButtonTitles;
        NSMutableArray *mAlertButtons = [NSMutableArray new];
        if (otherButtonTitles) {
            mAlertButtons = [otherButtonTitles mutableCopy];
        }
        if (cancelButtonTitle) {
            [mAlertButtons addObject:cancelButtonTitle];
        }
        self.alertButtons = [mAlertButtons copy];
    }
    return self;
}

- (void)show {
  /// ここでAppDelegate の準備します。
    AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:self.title message:self.message preferredStyle:UIAlertControllerStyleAlert];

    /// ボタンの数だけボタンアクションを用意します。
    for (int i = 0; i < self.alertButtons.count;i++) {
        NSString *title = self.alertButtons[ i ];
        [alertController addAction:[UIAlertAction actionWithTitle:title style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            [self iOS8__alertView:self clickedButtonAtIndex:i];
        }]];
    }
  /// ここでAppDelegate から rootViewController に表示させます。
    [appDelegate.window.rootViewController presentViewController:alertController animated:YES completion:^{

    }];
}

/// 変更箇所
/// - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
// デリゲートで押したボタンを判別
- (void)iOS8__alertView:(iOS8__UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {

    switch (buttonIndex) {
        case 0: {
            // 0番目のボタン
            break;
        }
        case 1: {
            // 1番目のボタン
            break;
        }
        case 2: {
            // 2番目のボタン
            break;
        }
        case 3: {
            // 3番目のボタン
            break;
        }
            // …以下必要な分続く
    }
}

@end 

こんな感じですよね。

また色々と変更していくと思いますので、iOS8 対応できるように一つ一つ片付けていきましょう!

現場では、今まで動いていたというところがバージョンアップに従って変更されてしまうことで対応しなければなりません。これのおかげで、IT現場が食い扶持がなくなることはないと言われております。
ただこれを対応するのは結構大変だったりします。いつも新しい情報を取り入れていないといけなかったり、サービスが終わってしまったなんてこともありますからね。

契約する時にこのバージョンアップの対応に関してのことを示しておくといいかもですね。

制作チーム:サンストライプ

http://sunstripe.main.jp/
(月1WEBコンテンツをリリースして便利な世の中を作っていくぞ!!ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中!!)

地域情報 THEメディア

THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます!!
https://the.themedia.jp/

ゼロからはじめる演劇ワークショップ

多様化の時代に向けて他者理解を鍛える

ただいま、コロナの影響で中止中 6月ごろまで延期
https://workshop.themedia.jp/

プログラミングワークショップ・ウェブ塾の開講!!!

様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
プログラミングサロン 月1だけのプログラミング学習塾

青空プログラミング

まずはリフレッシュして考えてみようIoTの未来の社会を考えながらも社会問題などにも取り組む活動しています。

以下を用いています。
actcoin:SDGsを知るきっかけとなりました社会貢献の見える化を実現しているアプリケーションサービス
SDGs:持続可能な開発目標
Zoom:オンライン会議(Zoomを用いて会議をしたりしてます)

https://note.com/thecardgame/n/ndf387cacca47

協力応援 / 支援者の集い

トラストヒューマン

http://trusthuman.co.jp/
私たちは何よりも信頼、人と考えてます。

「コンサルティング」と「クリエイティブ」の両角度から「人材戦略パートナー」としてトータル的にサポートします!!

ネリム

https://nerim.co.jp/
配信事業などを映像コンテンツなどの制作しております

ビヨンドXプロジェクト

ビヨンドXプロジェクト全体会議

sunstripe2011
iOSプログラマーをしています。休日はアプリ開発の勉強などをしています。 一緒にアプリ開発してみたい方はDMください アプリ開発・マネージメントを日頃「素敵」をテーマに活動中 まったりラボというラジオ番組をしています。
http://sunstripe.main.jp/sunstripe/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away