【Objective-C】iOS 6でUIControlEventEditingChangedの挙動が変わった

iOS 6

iOS 6.0では、任意のUITextFieldを編集中に、内容が変わると呼ばれる、 UIControlEventEditingChanged の挙動が変わっていました。

iOS 5.1まではUITextFieldの編集中に、プログラム側からテキスト内容を変更しても UIControlEventEditingChanged が呼ばれましたが、iOS 6.0では、プログラム側でのテキスト内容変更において、このイベントが呼ばれなくなっていました。

//新規プロジェクトで試せる簡単なサンプル
- (void)editingChanged:(id)sender
{
    NSLog(@"editingChanged");
}
- (void)onTap:(id)sender
{
    UITextField *tf = (UITextField *)[self.view viewWithTag:10];
    tf.text = [NSString stringWithFormat:@"%@ tap", tf.text];
    //iOS 5.1までは編集中であればこの後にeditingChangedが呼ばれる
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(10.0, 10.0, 300.0, 30.0)];
    tf.tag = 10;
    tf.text = @"";
    tf.borderStyle = UITextBorderStyleRoundedRect;
    [tf addTarget:self action:@selector(editingChanged:) forControlEvents:UIControlEventEditingChanged];
    [self.view addSubview:tf];
    
    //適当に文字を追加していくボタン
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btn.frame = CGRectMake(10.0, 50.0, 100.0, 50.0);
    [btn setTitle:@"Tap" forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(onTap:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
    
    [tf becomeFirstResponder];
}

メモアプリなど、編集中にボタン等のアクションでプログラム側からテキスト内容を変換・追加・削除等を行うタイプで、常にこのイベントハンドラで変更を監視し、記述内容の保存(セーブ)処理などを行っていた場合は、注意が必要そうです。

タグ: iOS6 UITextField iPhone SDK

プロフィール
Daisuke Suzuki
ウェブサイトの制作から運営管理、アプリ開発など、様々な挑戦をして試行錯誤の日々を送っているフリーランスです。対外業務をするお仕事生活から抜け、現在は個人制作でご飯を食べています。 最近はアプリ攻略サイト AppGames を制作・公開し、そちらも手がけています。詳しいプロフィール
サイト内検索
自主制作したiOSアプリ
脱出ゲーム TAKUMI
脱出ゲーム Mobile Shop
付箋メモ帳型ToDoリスト
タブ式メモ帳
このブログについて
一から制作したお手製ブログ ver1.23
2012年9月11日に開始。自分で見て触って動かして、日々コツコツと調整しています。