2016-08-17 1 views
2

ボタンを押すか、UISearchBarで文字を消去しようとすると検出する方法があるのだろうか? Googleでかなり検索したところ、whiteSpaceCharacterを空のUITextFieldに、もう1つをshouldChangeTextInRange代理人にするという2つのソリューションを試しました。iOSキーボードの「削除」ボタンが空になっているかどうかを検出するUISearchBar

空のスペースを持つものは、空白があるとわかっているだけで、スペースを押して強調表示することで、非常に良い解決策ではないと思います。

検索バーが空の場合、shouldChangeTextInRangeを使用するものは機能しません。

私が見つけた解決策の大半はObjective Cであり、Swiftでこれを実行できる方法があれば素晴らしいと思います。もし誰かが私を正しい道に向けることができれば、素晴らしいだろう。

+0

で追加してくださいshouldChangeTextInRange文字列の文字数== 0のときにtrueを返します –

+0

検索バーが空のときに削除を検出したいのはなぜですか? – hariszaman

+0

@Ramkumarあなたのコメントを誤解した場合は申し訳ありません。私はiOSには比較的新しいアプリです。私が正しく理解している場合、shouldChangeTextInRangeは、テキストが変更されたときにのみ呼び出されます。ただし、テキストが空で、「削除」を押すと、テキストは実際には変更されず、呼び出されません。 – moka2258

答えて

1

すると、検索バーが空になったときに削除しますかwan'tなぜ分からないのですが、あなたはこのようにそれを行うことができます。

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

私の遅い返事を申し訳ありません、あなたの答えに感謝します。それは動作します。 私が持っている1つの問題は、空白を残すということです。そのため、ユーザーが実際に 'UITextField'を長押ししてスペースを実際に強調表示することができます。 私は自分のデリゲートを実行するために 'deleteBackward'メソッドをオーバーライドできるように、私自身の' UISearchBar'を 'UITextField'から作ることが唯一の方法だと思います。 私は本当にあなたの助けに感謝します – moka2258

関連する問題