web-dev-qa-db-ja.com

キーボードを非表示にするボタンを追加する

キーボードを非表示にするUITextViewには、次のメソッドがあります。

...
    textfield.returnKeyType = UIReturnKeyDone;
    textfield.delegate = self;
....

-(BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;

}

しかし、「完了」ボタンを「戻る」のままにして、キーボードを非表示にするボタンを追加したい場合は、どうすればよいですか?

14
Vins

キーボードをテキストフィールドのinputAccessoryViewとして閉じるボタンを備えたツールバーを割り当てることができます。簡単な例は、

UIBarButtonItem *barButton = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:textField action:@selector(resignFirstResponder)] autorelease];
UIToolbar *toolbar = [[[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)] autorelease];
toolbar.items = [NSArray arrayWithObject:barButton];

textField.inputAccessoryView = toolbar;
38

Swift 2.0バージョン:

//Declared at top of view controller
var accessoryDoneButton: UIBarButtonItem!
let accessoryToolBar = UIToolbar(frame: CGRectMake(0,0,UIScreen.mainScreen().bounds.width, 44))
//Could also be an IBOutlet, I just happened to have it like this
let codeInput = UITextField()

//Configured in viewDidLoad()
self.accessoryDoneButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: self, action: #selector(self.donePressed(_:)))
self.accessoryToolBar.items = [self.accessoryDoneButton]
self.codeInput.inputAccessoryView = self.accessoryToolBar

スウィフト4:

//Declared at top of view controller
var accessoryDoneButton: UIBarButtonItem!
let accessoryToolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 44))
//Could also be an IBOutlet, I just happened to have it like this
let codeInput = UITextField()

//Configured in viewDidLoad()
self.accessoryDoneButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.done, target: self, action: #selector(self.donePressed))
self.accessoryToolBar.items = [self.accessoryDoneButton]
self.codeInput.inputAccessoryView = self.accessoryToolBar

func donePressed() {
    //Causes the view (or one of its embedded text fields) to resign the first responder status.
    view.endEditing(true)
}

IToolBarドキュメント

'inputAccessoryView'ドキュメント

5
Jon Vogel

これはずっと簡単にできます!

IBでカスタムビューを作成しました。viewController.hで_IBOutlet UIView *accessoryView;_を作成し、それらと- (IBAction)dismissKeyboard;を接続しました。

完了ボタンのあるツールバーをビューに配置し、IBActionに接続して書き込みました:_[textView resignFirstResponder]_および

_- (void)viewDidLoad
{
    textView.inputAccessoryView = accessoryView;
    [super viewDidLoad];
}
_

しかし、実際にはそれは少し奇妙でアップルスタイルではないように見えます…アイデアがありますか?

3