Большая часть примера, который я нашел, находится в Objective - C
, что очень сложно для меня понять, может кто-нибудь представить пример по этому вопросу в Swift
. Here - это одно решение, но оно находится в Objective C
.UISearchBar обнаруживает, когда пользователь останавливает тип в swift
ответ
Вы должны проверить его с помощью UISearchBarDelegate:
func searchBarTextDidEndEditing(searchBar: UISearchBar) {
//DO what you want
}
Не забудьте добавить:
searchBar.delegate = self
и его относительный протокол:
UISearchBarDelegate
https://developer.apple.com/reference/uikit/uisearchbardelegate
Этот делегат: searchBarTextDidEndEditing
вызывается, когда клавиатура исчезает, так что добавьте этот код в ваш Proj:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
self.view.endEditing(true)
}
func searchBarTextDidEndEditing (searchBar: UISearchBar) { print ("Type End"); } Первоначально я сделал то же самое, но после того, как тип заканчивается, значение не печатается на консоли, поэтому я предполагаю, что это не работает. – user2273146
Вы должны добавить: searchBar.delegate = self –
override func viewDidLoad() { super.viewDidLoad() // Выполняйте любую дополнительную настройку после загрузки представления, как правило, из ниба. делегатов /* Настройки */ tableView.delegate = само tableView.dataSource = само searchBar.delegate = само } Да у меня есть упоминание, что уже. – user2273146
Swift версия вашей ссылки:
var searchDelayer: Timer!
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchDelayer.invalidate(), searchDelayer = nil
if true {
searchDelayer = Timer.scheduledTimer(timeInterval: 1.5, target: self, selector: #selector(self.doDelayedSearch), userInfo: searchText, repeats: false)
}
}
func doDelayedSearch(_ t: Timer) {
assert(t == searchDelayer)
self.request(searchDelayer.userInfo!)
searchDelayer = nil
}
var priorSearchText = ""
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(self.request), object: priorSearchText)
priorSearchText = searchText
}
if true {
self.performSelector(#selector(self.request), withObject: searchText, afterDelay: 1.5)
}
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
print("after every text gets changed")
timer.invalidate()
timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: #selector(ViewController.output), userInfo: searchText, repeats: false)
}
func output(){
print("hello")
if timer.userInfo != nil {
print(timer.userInfo)
}
timer.invalidate()
}
Вот как я решил свою проблему ... Спасибо всем за ваше любезное предложение :) – user2273146
Спросите более ясно, так что кто-то может понять !! вы можете поделиться ссылкой ссылки на цель c, о которой вы упомянули! – Lion
Хорошо, я отредактирую свой вопрос. – user2273146
Вы пробовали поискBarTextDidEndEditing и searchBarShouldEndEditing ?? –