jubilee

Programing, Books and more...

キーボードの上に閉じるボタンを表示する(inputAccessoryView)

UITextViewなどでキーボードを閉じたい時に、キーボードの上部に閉じるボタンを追加して閉じる方法。
inputAccessoryViewといって、キーボード上部にボタンなどを配置できる。
キーボードの表示/非表示に合わせて、表示/非表示される。

生成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
- (void)viewDidLoad
{
...

    // ボタンを配置するUIViewを作成(幅320/高さ44・背景色:透明)
    UIView* accessoryView =[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    accessoryView.backgroundColor = [UIColor clearColor];

    // ボタンを作成(accessoryView内で、X:270 Y:5 Width:40 Height:30にイメージ有りボタン)
    UIButton* closeButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [closeButton setImage:[UIImage imageNamed:@"hideKeyboard"] forState:UIControlStateNormal];
    closeButton.contentMode = UIViewContentModeScaleAspectFit;
    closeButton.frame = CGRectMake(270, 5, 40, 30);
    // ボタンタップ時のメソッドを指定(closeKeyboard: → 自作メソッド)
    [closeButton addTarget:self action:@selector(closeKeyboard:) forControlEvents:UIControlEventTouchUpInside];

    // ボタンをViewに追加
    [accessoryView addSubview:closeButton];

    // ビューをUITextFieldのinputAccessoryViewに設定
    _textView.inputAccessoryView = accessoryView;

...
}

ボタンタップ時の処理

Closeボタン実行時の処理も記述する。

1
2
3
4
-(void)closeKeyboard:(id)sender
{
    [self.view endEditing:YES];
}

関連

UITextView関連では、以下もあり。
http://mzgk.github.io/blog/2014/uiscrollview-tapevent/