检测是否"删除"在空的UISearchBar中按下iOS键盘上的按钮

时间:2016-08-17 08:45:21

标签: ios swift uisearchbar

我想知道是否有办法检测用户何时按 delete 按钮或尝试删除UISearchBar中的字符?我在谷歌搜索了很多,我尝试了几个解决方案,其中一个将whiteSpaceCharacter放在空UITextField中,另一个使用shouldChangeTextInRange代表。

那个空的空间,用户可以通过按住并突出显示空间以某种方式知道那里有空间,所以我觉得这不是一个很好的解决方案。

当搜索栏为空时,使用shouldChangeTextInRange的那个不起作用。

另外需要注意的是,我发现的大多数解决方案都是在Objective C中,如果有一些方法可以在Swift中实现,那将会很棒。或者如果有人能指出我走向正确的道路,那就太好了。

1 个答案:

答案 0 :(得分:1)

不知道为什么当searchBar为空时你不会做删除,但你可以这样做:

import UIKit

class ViewController: UIViewController, UISearchBarDelegate{

private var search : UISearchBar!

override func viewDidLoad() {
    super.viewDidLoad()

    search = UISearchBar()
    search.frame = CGRectMake(0, 0, 200, 200)
    search.delegate = self

    self.view.addSubview(search)
}

func searchBar(searchBar: UISearchBar, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
    let  char = text.cStringUsingEncoding(NSUTF8StringEncoding)!
    let isBackSpace = strcmp(char, "\\b")

    if (isBackSpace == -92) {
        print("Backspace was pressed")
    }
    return true
}

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
    if searchText == "" {
        search.text = " "
    }
}



}

这将使用UISearchBarDelegate,并通过shouldChangeTextInRange函数查明是否按下了退格键。如果字符串为空,则重新应用空格以使其连续可删除。它有点俗气,但这是我所知道的唯一方法,因为它会在字段为空时进行注册。

希望它有用。