TableView de recherche en Swift
J'ai deux tableaux: FirstTableArray (inclure le nom de marques) et SecondTableArray (inclure les modèles).
Je veux ajouter de la recherche par le biais de laquelle le modèle de téléphone peuvent être trouvés par une partie du nom.
import UIKit
import MessageUI
class FirstTableViewController: UITableViewController {
var FirstTableArray = [String]()
var SecondTableArray = [SecondTable]()
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.navigationBar.isTranslucent = false
self.navigationController?.navigationBar.barStyle = .black
self.navigationController?.navigationBar.tintColor = UIColor.white
//First Table Array
FirstTableArray = ["Apple", "Samsung"]
//Second Table Array
SecondTableArray = [
SecondTable(SecondTitle: ["iPhone 5s", "iPhone 6", "iPhone 6s"]),
SecondTable(SecondTitle: ["Galaxy S4", "Galaxy S5", "Galaxy S6"]),
]
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return FirstTableArray.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let Cell = self.tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as UITableViewCell
Cell.textLabel?.text = FirstTableArray[(indexPath as NSIndexPath).row]
return Cell
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let indexPath : IndexPath = self.tableView.indexPathForSelectedRow!
let DestViewController = segue.destination as! SecondTableViewController
let SecondTableArrayTwo = SecondTableArray[(indexPath as NSIndexPath).row]
DestViewController.SecondTableArray = SecondTableArrayTwo.SecondTitle
}
}
Pouvez-vous m'aider?
OriginalL'auteur user6023982 | 2017-01-15
Vous devez vous connecter pour publier un commentaire.
Je suis en train de travailler à travers la même chose aujourd'hui et j'ai trouvé ce tuto très facile à suivre: https://github.com/codepath/ios_guides/wiki/Search-Bar-Guide
Il vous guidera à travers les étapes de l'ajout de la barre de recherche dans Interface Builder, mise en place du délégué, et notamment une méthode pour filtrer les résultats.
Fournir un moyen pour les utilisateurs à la recherche à travers une collection d'objets est une tâche courante dans iOS projets. Une interface standard pour la mise en œuvre de comportements de recherche est la barre de recherche.
Il y a quelques façons de travailler avec des Barres de Recherche:
Directement à l'aide d'un UISearchBar. C'est le plus bare bones façon d'utiliser
UISearchBars. Cela peut être extrêmement flexible, si vous souhaitez concevoir
et le programme de votre propre interface de recherche, cependant, ne fournissent pas comme
de nombreuses fonctionnalités intégrées que les autres méthodes.
À l'aide d'un UISearchDisplayController pour aider à gérer une interface de recherche.
Le UISearchDisplayController vous permet de présenter une recherche standard
interface avec des animations intégrées. Cette méthode vous oblige à afficher
résultats de la recherche dans un tableau. - DÉCONSEILLÉ
À l'aide d'un UISearchController pour aider à gérer une interface de recherche. L'
UISearchController est un nouveau contrôleur (disponible uniquement sur iOS 8+)
qui vous aide à présenter une interface de recherche à l'aide de toute sorte de vue d'
afficher les résultats de recherche.
Ce guide couvre les bases de travailler avec chacun de ces classes. Aucune de ces classes en fait met en place la "recherche" comportement de trouver des articles qui correspondent à une requête donnée de la chaîne, depuis la détermination des objets qui correspondent varie avec le domaine spécifique de cas d'utilisation (par exemple, lors de la recherche pour "les gens", vous pourriez vouloir suivre sur leurs noms, alors que vous, vous voudrez peut-être un plein-texte pré-indexé de recherche lors de la recherche par le biais d'e-mails). Vous aurez à mettre en œuvre toute recherche/filtrage comportement vous-même.
De travail avec UISearchBars directement
À sa base, une barre de recherche est rien de plus qu'une simple champ de texte fourni avec une portée de contrôle et de quelques animations et un couple de boutons. Chaque barre de recherche a un délégué qui vous donne la possibilité de réagir aux actions de l'utilisateur. Le plus important délégué méthodes sont les suivantes:
la mise à jour de l'affichage de l'ensemble de résultats de recherche que l'utilisateur tape
une requête
est lente (par exemple, nécessite d'effectuer une lente appel d'API), vous aurez envie d'attendre
jusqu'à ce que l'utilisateur appuie sur le bouton de recherche avant la mise à jour de la recherche
résultats.
Exemple, la recherche d'une table
Nous commençons par une vue unique de l'application avec une base UITableView. Vous pouvez ajouter un UISearchBar comme vous le feriez avec n'importe quel autre contrôle en faisant glisser un à votre vue-contrôleur dans interface builder ou par programmation de l'ajouter.
Le délégué de la propriété de la barre de recherche doit être défini pour un objet qui implémente UISearchBarDelegate. Généralement vous faire votre point de vue contrôleur de mettre en œuvre UISearchBarDelegate et jeu de barre de recherche.delegate = self dans la méthode viewDidLoad.
Le code pour implémenter le comportement de recherche est comme suit. Nous maintenons une autre matrice filteredData pour représenter les lignes de données qui correspondent à notre recherche de texte. Lorsque la recherche des modifications apportées au texte que nous mettons à jour filteredData et recharger notre table.
Voici à quoi ça ressemble lors de l'exécution. Notez que les résultats de la recherche sont affichés dans la même table, et il n'y a pas de présentation d'une interface de recherche distincte.
Exemple, la recherche d'une vue de collection
Depuis le UISearchBar est assez simple, il peut être combiné avec n'importe quel abitrary vue de construire votre propre interface de recherche. Voici à quoi il pourrait ressembler jumelé avec une vue de collection.
Le code est essentiellement la même que dans le cas avec les vues de table.
L'annulation de la Recherche et de cacher le clavier
Une fois que l'utilisateur appuie sur la barre de recherche, le clavier apparaîtra, et vous remarquerez qu'il ne disparaît pas lorsque vous appuyez sur X. Vous pouvez afficher le bouton Annuler lorsque l'utilisateur appuie sur la barre de recherche, et lorsque l'utilisateur clique sur Annuler, de masquer le clavier.
Il y a une chouette searchBarTextDidBeginEditing méthode pour UISearchBarDelegate qui est appelée lorsque l'utilisateur commence à modifier le texte de la recherche. Vous pouvez afficher le bouton Annuler dans la méthode:
Lorsque l'utilisateur appuie sur le bouton annuler, délégué searchBarCancelButtonClicked méthode est appelée. À ce stade, vous pouvez masquer le bouton Annuler, effacer le texte existant dans la barre de recherche et masquer le clavier comme ceci:
À l'aide de UISearchControllers (iOS 8+)
Une nouvelle façon de gérer la présentation d'une interface de recherche (uniquement disponible dans iOS 8 et ci-dessus) se fait via le UISearchController. Ce contrôleur gère certains de la logique et de l'animation de la présentation d'une interface de recherche distincte pour vous tout en vous permettant de spécifier la façon dont les résultats de votre recherche sont affichés.
Exemple, la recherche d'une table
Il n'existe actuellement aucun objet intégré dans l'Interface du Générateur de Bibliothèque d'Objets pour un UISearchController. Le moyen le plus facile est de le faire par programmation. Cela crée également un UISearchBar et définit la recherche du contrôleur de la barre de recherche de propriété. Vous pouvez ajouter la barre de recherche de votre point de vue de la hiérarchie par programmation.
Afin de mettre à jour les résultats de votre recherche, vous aurez à mettre en œuvre les UISearchResultsUpdating protocole et définissez la recherche du contrôleur de searchResultsUpdater propriété.
Vous n'avez pas besoin de mettre en œuvre les UISearchControllerDelegate sauf si vous avez besoin de s'accrocher dans les événements autour de la présentation de l'interface de recherche.
Mettant tous ensemble, le code ressemble à ceci. Notez que nous avons à lire le texte de la recherche dans la barre de recherche en updateSearchResultsForSearchController. Une autre chose à noter est que nous avons mis ce point de vue du contrôleur de definesPresentationContext true à la propriété. Cela signifie que la recherche contrôleur devrait utiliser cette vue du contrôleur de cadre (comme oppposed à la racine-vue-contrôleur), lors de la présentation de l'interface de recherche. Dans ce cas, cela signifie que l'interface de recherche permettra d'élargir au-dessus du transporteur bar.
Voici à quoi ça ressemble lors de l'exécution. Notez que contrairement à la recherche de contrôleur d'affichage exemple, nous utilisons la même table pour afficher les résultats de la recherche au lieu de la superposition d'une autre table. Cependant, à la différence lorsque vous travaillez avec juste la barre de recherche, nous avons encore du construite dans l'animation lors de la transition à l'interface de recherche.
En outre, vous obtenez la logique de montrer bouton Annuler et de cacher le clavier lorsque l'utilisateur appuie sur le bouton annuler pour gratuit lorsque vous utilisez ce.
Exemple, la recherche d'une vue de collection
Nous pouvons tout aussi bien utiliser la recherche de contrôleur à la recherche d'une vue de collection en place. Nous avons encore la présentation d'une interface de recherche, mais à la différence lorsque vous travaillez avec la recherche de contrôleur d'affichage nous ne sommes pas limités à l'utilisation d'un tableau pour afficher les résultats de la recherche.
Le code est presque le même que lors de la recherche de la vue du tableau ci-dessus. La seule différence notable est que nous avons dû introduire un espace réservé à l'affichage dans l'interface builder pour la barre de recherche puisqu'il y a encore quelques bizarreries avec la mise en place d'un contrôleur de recherche la barre de recherche à l'intérieur de la vue d'une collection complémentaire de vue.
Barre de recherche en Vue de Navigation
Une exigence commune est de placer la barre de recherche à l'intérieur de la barre de navigation.
Cela peut être configuré par programmation dans votre point de vue du contrôleur de viewDidLoad comme suit.
Lorsque vous travaillez directement avec une barre de recherche:
L'aide d'une recherche de contrôle de l'affichage:
À l'aide d'un contrôleur de recherche:
UISearchResultsUpdating
fonction de mise à jour qui a changé dans la signature:func updateSearchResults(for searchController: UISearchController)
OriginalL'auteur Gibraltar
Je dirais implemeting un UISearchBar et l'ajout de votre classe en tant que délégué à la UISearchBar puis en les délégués des méthodes que vous pouvez prendre la barre de recherche de texte et d'effectuer la recherche sur l'datasouce et puis de recharger la tableview données en conséquence
Edit: Vous pouvez utiliser ce tutoriel pour savoir comment mettre en œuvre UISearchBar sur un UITableView
https://www.raywenderlich.com/472-uisearchcontroller-tutorial-getting-started
OriginalL'auteur John