在文本字段中输入警报而不是键盘 - >光标停留在文本字段Swift2中

时间:2016-03-16 06:57:13

标签: ios swift xcode7 inputview

我试图在文本字段的输入视图中发出警报,因为我有最大值。 3个选择,我的客户希望看起来像这样。

基本上没问题,我可以点击文本字段,从而显示警报。选择文本字段中的值后正确更新,但随后,光标停留在文本字段中(因为点击而假设,文本字段是第一响应者)

现在的问题是,当我在光标所在的位置再次点击同一个文本字段时,默认键盘会打开。那么我该怎样做才能阻止它这样做呢?

我在代码中的各个位置尝试了以下内容:

    if (alertView != nil) {
        alertView?.dismiss()
    } //Not very professional, but still in development :)

此外,当我正在使用键盘编辑另一个文本字段时,我可以在点击相应的文本字段时显示警报。这导致键盘覆盖警报,因为当发生这种情况时我也无法关闭键盘。

尝试这样做:(用其他文本字段的事件方法编写

@IBAction func TextboxUnitEditing(sender: UITextField) {
    //One try of preventing the cursor (not working)
    tableView.endEditing(true)

    ...
    /* Unrelated Code here */
    ...

    alertView = SwiftAlertView(...)

            ...
    /* Unrelated Code here */
    ...

    alertView.show()
}

以下是一些重要的代码片段,用于了解我如何构建它:

此函数是textfield

的EditingDidBegin事件
func alertView(alertView: SwiftAlertView, clickedButtonAtIndex buttonIndex: Int) {
    //buttonIndex == 1 means, cancel was tapped
    if (buttonIndex == -1) {
        currentCell = nil
        tableView.endEditing(true)
        return
    }

    ...
    /* Change value in textfield */
}

警告的委托方法

    self.tableView.endEditing(true)

所以我的问题是,出了什么问题?我需要调用什么来摆脱光标?如果您还需要了解更多信息,请告诉我,我可以提供更多信息。

提前致谢。

编辑:

解决。而不是:

    dispatch_async(dispatch_get_main_queue(),{
        self.tableView.endEditing(true)
    })

我必须这样做:

str = "<p>line 1<br></p><p>lin2<br></p><h1>line 3<br></h1>";
var div = document.createElement('div');
div.innerHTML = str;

var brs = div.querySelectorAll('br');
[].forEach.call(brs, function(br) {
  br.parentNode.parentNode.insertBefore(br, br.parentNode.nextSibling)
});
snippet.log(div.innerHTML)

2 个答案:

答案 0 :(得分:1)

您可以使用此扩展程序完成您似乎要描述的工作,不需要文本框吗?你用它来称呼它。

  showInfo(message: error!.localizedDescription)

这是它背后的扩展。

protocol ShowsInfo {}

extension ShowsInfo where Self: UIViewController {
    func showInfo(title: String = "Info", message: String) {
    let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert)
    alertController.addAction(UIAlertAction(title: "Ok", style: .Default, handler: nil))
    dispatch_async(dispatch_get_main_queue()) {
        self.presentViewController(alertController, animated: true, completion: nil)
    }
}
}

答案 1 :(得分:1)

而不是

self.tableView.endEditing(true)

必须在主线程上完成

dispatch_async(dispatch_get_main_queue(),{
    self.tableView.endEditing(true)
})

否则将跳过此行