web-dev-qa-db-fra.com

Swift: UISearchBar: obtenir du texte lorsque le bouton de recherche est cliqué

Je joue avec Swift pour l'apprendre et en ce moment j'ai du mal à obtenir le texte d'un UISearchBar

En ce moment, mon code ressemble à ceci:

import UIKit

class SecondViewController: UIViewController {

    @IBOutlet var myWebView : UIWebView
    @IBOutlet var adressbar: UISearchBar

    override func viewDidLoad() {
        super.viewDidLoad()

        adressbar.showsScopeBar = true

        var url = NSURL(string: "http://google.com")
        var request = NSURLRequest(URL: url)

        myWebView.scalesPageToFit = true
        myWebView.loadRequest(request)
    }

    func searchBarSearchButtonClicked( searchBar: UISearchBar!) {

        var url = NSURL(string: adressbar.text)
        var request = NSURLRequest(URL: url)

        myWebView.scalesPageToFit = true
        myWebView.loadRequest(request)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
22
Eudoxus

Dans viewDidLoad, vous devez définir le délégué de la barre de recherche pour recevoir searchBarSearchButtonClicked d'elle:

import UIKit

class SecondViewController: UIViewController, UISearchBarDelegate
{
    @IBOutlet var myWebView : UIWebView
    @IBOutlet var adressbar: UISearchBar

    override func viewDidLoad()
    {
        super.viewDidLoad()

        adressbar.showsScopeBar = true
        adressbar.delegate = self

        var url = NSURL(string: "http://google.com")
        var request = NSURLRequest(URL: url)

        myWebView.scalesPageToFit = true
        myWebView.loadRequest(request)
    }

    func searchBarSearchButtonClicked( searchBar: UISearchBar!)
    {
        var url = NSURL(string: searchBar.text)
        var request = NSURLRequest(URL: url)

        myWebView.scalesPageToFit = true
        myWebView.loadRequest(request)
    }

    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
    }
}
31
Alex Zielenski

1.La première chose est de se conformer à UISearchbarDelegate.

2.Réglez le délégué de la barre de recherche sur lui-même.

Vous pouvez trouver plus d'informations à ce sujet ici Tutoriel Swift iOS: Implémentation de la recherche en utilisant UISearchBar et UISearchBarDelegate

2
Shrikar

Réponse simple (non spécifique) pour ceux qui arrivent ici via la recherche:

Si le nom de votre point de vente pour votre UISearchBar est "searchBar" ...

@IBOutlet weak var searchBar: UISearchBar!

Ensuite, le texte entré par l'utilisateur dans UISearchBar est appelé ...

searchBar.text

Deux choses courantes Swift oublient: 1. Assurez-vous d'ajouter la classe UISearchBarDelegate ...

ViewController: UIViewController, UISearchBarDelegate
  1. N'oubliez pas d'identifier votre classe de vue en tant que délégué ... Dans viewDidLoad, vous pouvez écrire ...

    searchBar.delegate = self
    

Si vous oubliez # 1 ci-dessus, vous ne pourrez pas compléter automatiquement les méthodes que vous devrez implémenter comme ...

func searchBarSearchButtonClicked(_ seachBar: UISearchBar) { your code }

... qui vous est donné par le protocole délégué.

0
John Pitts