2016-08-17 5 views
2

Мне интересно, есть ли способ обнаружить, когда пользователь нажимает , удалите или попробуйте стереть символ в UISearchBar? Я много искал в Google, и я попробовал пару решений, где один положил whiteSpaceCharacter в пустой UITextField, а другой - делегат shouldChangeTextInRange.Обнаружить, если кнопка «удалить» на клавиатуре iOS нажата в пустой UISearchBar

Тот, у кого есть пустое пространство, пользователь может как-то узнать, что там есть пробел, просто нажмите клавишу удержания и выделите место, поэтому я думаю, что это было не очень хорошее решение.

Тот, кто использует shouldChangeTextInRange, не работает, когда панель поиска пуста.

Другое дело, что большинство решений, которые я нашел, были в Objective C, и было бы здорово, если бы я мог сделать это в Swift. Или было бы здорово, если бы кто-нибудь мог указать мне на правильный путь.

+0

Добавить в shouldChangeTextInRange вернуть true, когда число символов строк == 0 –

+0

Почему вы хотите обнаружить удаление, когда панель поиска пуста? – hariszaman

+0

@ Ramkumar Извините, если я неправильно понял ваш комментарий, и я относительно новичок в iOS. Если я правильно понимаю, shouldChangeTextInRange будет вызываться только при изменении текста. Однако, когда текст пуст и нажимается «delete», текст действительно не изменяется, и он не будет вызван? – moka2258

ответ

1

Не знаю, почему вы wan't делать удаление, когда 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. Если строка пуста, она повторяет пробел, чтобы сделать его непрерывно удаляемым. Это липкий, но единственный способ, которым я знаю это сделать, поскольку он не регистрируется, когда поле пусто.

Надеюсь, это пригодится.

+0

Извините за мой последний ответ, спасибо за ваш ответ. Он работает. Одна из проблем заключается в том, что он оставляет пустое пространство, поэтому, когда пользователь на самом деле долго нажимает кнопку 'UITextField', пространство действительно может быть выделено. Я предполагаю, что единственный чистый способ - сделать мой собственный 'UISearchBar' из' UITextField', чтобы я мог переопределить метод 'deleteBackward' для запуска своего собственного делегата. Я действительно ценю вашу помощь независимо от того, – moka2258