UIViewController内のUIButtonのaddTarget:action:forControlEventについて

UIViewControllerクラスのviewControllerにUIButtonクラスのbuttonを作成し、ボタンをタッチした時にイベントを実行するようにする。
ボタンタッチの検出と、タッチに対するアクションを指定するには、addTarget:action:forControlEventメソッドを用いる。
この時、MyAppDelegateのメッソド内で作成したUIViewControllerのオブジェクトではaddTarget:action:forControlEventメソッドを実行するとエラーとなる。しかし、MyAppDelegateのインスタンス変数としてUIViewControllerのオブジェクトを作成することでaddTarget:action:forControlEventメソッドを実行できる。


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

@interface MyAppDelegate : UIResponder <UIApplicationDelegate>
{
    UIViewController* viewController;
}

@property (strong, nonatomic) UIWindow *window;

@end

MyAppDelegate.m
#import "MyAppDelegate.h"
#import "MyViewController.h"

@implementation MyAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    
    viewController = [[MyViewController alloc] init];
    viewController.view.backgroundColor = [UIColor yellowColor];
    [self.window addSubview:viewController.view];
    
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

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

@interface MyViewController : UIViewController

- (void)buttonDidPush;

@end

MyViewController.m
#import "MyViewController.h"

@interface MyViewController ()

@end

@implementation MyViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
 // Do any additional setup after loading the view.
    
    UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, 200, 100)];
    label.backgroundColor = [UIColor greenColor];
    label.text = @"らべるてきすと";
    [self.view addSubview:label];
    
    UITextView* textView = [[UITextView alloc] initWithFrame:CGRectMake(20, 130, 200, 100)];
    textView.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:textView];
    
    UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame = CGRectMake(230, 20, 80, 50);
    [button setTitle:@"ボタン" forState:UIControlStateNormal];
    [button addTarget:self action:@selector(buttonDidPush) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
}

- (void)buttonDidPush
{
    NSLog(@"----ログ1----");
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

コメント