Skip to content

iOS5の予測変換バー対策 コピペ用

2011年11月25日

自分のコピペ用です。

別記事に書いてたのからちょっぴり詳しくなっています。

前回はinputAccesorryViewにビューを突っ込んでたけど、きちんと数値を指定して、アニメーションで動かしています。

以下みたいなビューに対して書いています。

※「 _ 」の付いている変数がインスタンス変数です。

- (void)viewDidLoad
{
    [super viewDidLoad];

    //OS情報取得
    NSArray *aOsVersions = [[[UIDevice currentDevice]systemVersion] componentsSeparatedByString:@"."];
    iOsVersionMajor_ = [[aOsVersions objectAtIndex:0] intValue];
    NSInteger iOsVersionMinor1 = [[aOsVersions objectAtIndex:1] intValue];
}

- (void)viewWillAppear:(BOOL)animated{
    [self performSelector:@selector(timerStarter) withObject:nil afterDelay:0.0];
    //キーボード表示のノティフィケーション
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:)
												 name:UIKeyboardWillShowNotification object:self.view.window];
}

- (void)viewWillDisappear:(BOOL)animated{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
}

- (void)hatsugenOpen{
    [UIView beginAnimations:nil context:NULL];
    if (![keyboardType_ isEqualToString:@"en-US"] && iOsVersionMajor == 5) {
        //Ver.5 日本語 ここにサイズ変更を書く
        textInputView_.frame = CGRectMake(0, 112, 320, 88);
        tableView_.frame = CGRectMake(0, 0, 320, 112);
    }
    else{
        //日本語以外 ここにサイズ変更を書く
        textInputView_.frame = CGRectMake(0, 148, 320, 88);
        tableView_.frame = CGRectMake(0, 0, 320, 148);
    }
    [UIView commitAnimations];
}

- (void)keyboardWillShow:(id)sender{
    NSLog(@"keyboardWillShow");
    UITextInputMode *tinput = [UITextInputMode currentInputMode];
    NSLog(@"mode = %@",[tinput primaryLanguage]);
    //iOSキーボード表示対策
    if ([[tinput primaryLanguage] isEqualToString:@"ja-JP"] && iOsVersionMajor == 5) {
        NSLog(@"日本語入力キーボード");
        keyboardType_ = @"ja-JP";
    }
    else if([[tinput primaryLanguage] isEqualToString:@"en-US"] && iOsVersionMajor == 5){
        NSLog(@"英語入力キーボード");
        keyboardType_ = @"en-US";
    }else{
        NSLog(@"ios4");
    }
    [self hatsugenOpen];
}

このソースでは、「tableView_」と「textInputView_」のサイズ変更しています。

まず、ViewDidLoadでOSのバージョンを取得しています。また、ViewWillApperでノティフィケーションの宣言、ViewWillDisappearでのティフィケーションのリムーブをしています。

キーボード系のメソッドは、

表示時:keyboardWillShow

変更時:keyboardWillChange のあとに keyboardWillShow

が呼び出されます。

以前書いた記事では、keyboardWillChangeを使っていましたが、keyboardWillShowがキーボード初期表示時、変更時のたびに呼び出されるし、配置アニメーションのメソッドを作ったので不要になっちゃいました。

OSバージョンもつど取得してしまえば変数化する必要もないっちゃ無いですね。

このソースでの流れは

1.ビューライフサイクル系でノティフィケーション宣言、バージョン取得

2.keyboardWillShowで今の言語、バージョンを照らしあわせてkeyboardTypeにキーボードの種類を代入

3.そのキーボードの種類をhatsugenOpenで確認し、位置を調整する

キーボードの変更があれば、2→3の繰り返りになります。

このソースではiOS4は変換スペースは表示されないため、en-USと同じ扱いをしています。

広告

From → iPhone開発

コメントする

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。