LoginSignup
1
0

More than 5 years have passed since last update.

UIAlertController生成を他クラスに切り分ける PART2

Posted at

前回、UIAlertControllerの生成を別クラスに切り分けてみたが、汎用性がなく、クラスに切り分ける意味がなくなってしまっていたので、改めて書いてみる。
今回はデリゲートと合わせて使ってみました。

Alertを生成するクラスの用意

任意のテキスト情報を受け取りControllerの代わりにUIAlertControllerを作ります。
その際に、アラートアクションとしてデリゲートメソッドをセットしています。

AlertHelper.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@protocol AlertHelperDelegate <NSObject>
- (void)reload;
@end

@interface AlertHelper : NSObject
@property (nonatomic, weak) id<AlertHelperDelegate> delegate;
- (UIAlertController *)createAlertController:(NSString *)title
                                     messege:(NSString *)messege;
@end
AlertHelper.m
#import "AlertHelper.h"

@interface AlertHelper ()

@end

@implementation AlertHelper

- (UIAlertController *)createAlertController:(NSString *)title
                                     messege:(NSString *)messege {

    UIAlertController *aleartController = [UIAlertController alertControllerWithTitle:title
                                                                              message:messege
                                                                       preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"キャンセル"
                                                     style:UIAlertActionStyleCancel
                                                   handler:^(UIAlertAction *action) {

                                                       NSLog(@"キャンセルしました。");

                                                   }];

    UIAlertAction *save = [UIAlertAction actionWithTitle:@"保存"
                                                   style:UIAlertActionStyleDefault
                                                 handler:^(UIAlertAction *action) {

                                                     NSLog(@"保存しました。");

                                                     // デリゲートメソッドを呼ぶ
                                                     [self.delegate reload];

                                                 }];

    [aleartController addAction:cancel];
    [aleartController addAction:save];

    return aleartController;
}

@end

Controllerクラスでの受け取りと実行

ボタンアクションをトリガーにアラートを受け取り、表示します。
デリゲートメソッドを使うので、そちらの用意も行います。

ViewController.m
#import "ViewController.h"
#import "AlertHelper.h"

@interface ViewController () <AlertHelperDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

}

// デリゲートメソッド
- (void)reload {

    NSLog(@"保存ボタン押下後、このメソッドが走ります。");

}

- (IBAction)outputAleart:(id)sender {

    AlertHelper *aleartHelper = [AlertHelper new];

    aleartHelper.delegate = self;

    UIAlertController *aleartController = [aleartHelper createAlertController:@"タイトル" messege:@"メッセージ"];

    [self presentViewController:aleartController animated:true completion:nil];
}

@end

まとめ

前回の記事でやった方法よりは汎用性があるかなと思います。
デリゲートと合わせて使うことで、コントローラーから切り出しても不自由なく使えるかなと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0