私は、ユーザーからの入力を得るためにテキストボックスでUIAlertControllerを使用するサイドプロジェクトアプリを持っています。私の問題は、ユーザーがテキストを入力して「追加」を押すと、キーボードが1〜3秒間開いたままになっていることです。ただし、ユーザーがキーボードのテキストボックスに入力したテキストでリターンキーを押すと、これは発生しません。もともと私はそれが完了ハンドラを使用し、それが完了するのを待つ必要があると思ったが、リターンキーを使用するとうまく動作するので、そうは思わない。UIAlertControllerを使用するとキーボードが遅くなります
私は警告を表示する場所です:
func addItem(view: UIViewController, completion: (text: String?) -> Void) {
let diag = UIAlertController(title: "Add Task", message: "Enter a task name", preferredStyle: .Alert)
diag.addTextFieldWithConfigurationHandler({ (textField) -> Void in })
diag.addAction(UIAlertAction(title: "Add", style: .Default, handler: { (action) -> Void in
let textOfTask = diag.textFields![0] as UITextField
let textValue = textOfTask.text!
if textValue.characters.count > 0 {
completion(text: textValue)
}
}))
diag.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: { (action: UIAlertAction!) in
completion(text: nil)
}))
view.presentViewController(diag, animated: true, completion: nil)
}
そして、どのように私はこの関数をされて呼び出しています:
だから、@IBAction func didPressAdd(sender: AnyObject) {
addItem(self) {
(text) in
if let itemText = text {
// Check if has all the datas
if (self.def.objectForKey("simplest_itemlist") != nil) {
// Does have all the datas
self.tableView.reloadData()
}
// Append new data
self.itemList.append(itemText)
self.tableView.reloadData()
// Save to UserDefaults
self.def.setObject(self.itemList, forKey: "simplest_itemlist")
self.def.synchronize()
print(self.itemList)
}
}
}
うわー、それは非常にイライラしています。私はそれがなぜ実装されるのか想像できません。これを回避する方法はありますか?キーボードの戻るボタンを使って入力したテキストを返すことはできますか?私はそれを行う方法を見つけていない – dsch
私は小さな遅延に自分自身を辞任し、(1)多くの人が単にキーボードのボタンを使用するかもしれないことを認識し、(2)ユーザーはおそらくそれによって悩まされません。ユーザーがキーボードのボタンを押すことをシミュレートする暗い道を下りたいなら、ドラゴンがある。 – sschale
それは本当です。キーボード終了ボタンはほとんどの場合、使用可能な場合は使用します。これが存在することを私に知らせ、ユーザーが実際にボタンを使用している場合は、そのボタンを処理する必要があります。しかし、情報をありがとう! – dsch