2016-08-17 2 views
2

버튼을 누르거나 UISearchBar에서 문자를 지우려고 할 때 감지하는 방법이 있는지 궁금합니다. Google에서 검색 한 결과 두 개의 솔루션을 시도했는데 에 whiteSpaceCharacter을 넣었고 다른 하나는 shouldChangeTextInRange 대리인에게 맡겼습니다.iOS 키보드의 "삭제"버튼이 비어있는 경우 검색 UISearchBar

빈 공간이있는 사용자는 아무 래도 거기에 공간이 있다는 것을 알 수 있습니다. 누른 채로 공간을 강조 표시하면 매우 좋은 해결책은 아닌 것 같습니다.

shouldChangeTextInRange을 사용하는 검색 창은 비어있을 때 작동하지 않습니다.

주목할만한 또 다른 사항은 Objective C에있는 솔루션의 대부분이 Swift에서이 작업을 수행 할 수있는 방법이 있다면 좋을 것입니다. 또는 누군가가 나를 올바른 길로 인도 할 수 있다면 좋을 것입니다. 당신이 검색 창은 비어있을 때 삭제 할 wan't 왜

+0

에 추가 shouldChangeTextInRange 문자열 문자 개수 == 0 일 때 true를 반환합니다. –

+0

검색 창이 비어있을 때 왜 검색을 삭제 하시겠습니까? – hariszaman

+0

@Ramkumar 귀하의 의견을 오해 한 경우 죄송합니다. iOS에 비교적 익숙합니다. 텍스트가 변경되었을 때만 shouldChangeTextInRange가 호출됩니다. 그러나 텍스트가 비어 있고 "삭제"를 누르면 텍스트가 실제로 변경되지 않고 호출되지 않습니다. – moka2258

답변

1

모르겠지만, 당신은 이런 식으로 작업을 수행 할 수 있습니다

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'를 길게 누르면 해당 공간을 실제로 강조 표시 할 수 있다는 것입니다. 유일한 방법은'UITextField'에서 내 자신의'UISearchBar'를 만들어 내 자신의 델리게이트를 실행하기 위해'deleteBackward' 메소드를 오버라이드 할 수 있도록하는 것입니다. 정말 도움에 감사드립니다. – moka2258