Je regarde et remonte à nouveau la WWDC 2020 "Configuration de la cellule moderne" mais éclairs ne frappe pas.
Je comprends que la listeContentConTonfiguration intégrée a des propriétés similaires à la Style de cellule intégré Composants tels que l'étiquette de texte et la vue d'image. Mais je n'utilise jamais les styles de cellules intégrés; Je crée toujours une sous-classe de cellules et concevez les sous-classes de la cellule de zéro dans une cellule de prototype XIB ou de storyboard, ou même les structurer en code.
Comment puis-je utiliser les configurations d'Apple pour remplir les sous-visions de mes cellules?
La vidéo dit:
En plus de la configuration du contenu de la liste, nous vous donnons également accès à la vue de contenu de la liste associée qui implémente tout le rendu. Vous venez de créer ou de mettre à jour cette vue à l'aide de la configuration, puis vous pouvez l'ajouter sous la forme d'une sous-Sous-site, à côté de vos propres vues personnalisées. Cela vous permet de profiter de toutes les fonctionnalités de configuration de contenu et de combiner la liste de visualisation de ListContent avec vos propres vues personnalisées supplémentaires à côté, telles qu'une vue d'image supplémentaire ou une étiquette.
Ok, non, ce n'est pas ce que je veux faire. Je ne veux pas tout de la sous-étage de style de cellule intégré.
Alors, la vidéo dit:
Même lorsque vous construisez une hiérarchie de visualisation entièrement personnalisée dans vos cellules, vous pouvez toujours utiliser les configurations système pour vous aider. Étant donné que les configurations sont si légères, vous pouvez les utiliser comme source de valeurs par défaut pour des choses comme des polices, des couleurs et des marges que vous copiez sur vos vues personnalisées, même si vous n'appliquez jamais la configuration directement elle-même. Et pour des cas d'utilisation plus avancés, vous pouvez Créez un type de configuration de contenu entièrement personnalisé avec une classe de visualisation de contenu couplé qui le rend, puis utilisez votre configuration personnalisée avec n'importe quelle cellule de la même manière que vous utiliseriez une configuration de contenu de liste.
Mes italiques et les italiques font partie de la question. Je demande: comment?
Je comprends qu'il y a un IContentConfiguration Protocole.
Je comprends que la classe conforme - génère à travers sa méthode makeContentView
une méthode "Vue de contenu", un UIView avec une propriété configuration
(car elle est conforme à l'UIContentConfiguration).
Comment puis-je utiliser cela en conjonction avec ma sous-classe de cellules personnalisée pour communiquer des informations à partir de la source de données à la cellule et peupler les sous-visions de la cellule?
Comme d'habitude, il se sent comme Apple vous montre les exemples de jouets et omettes complètement des détails sur la façon dont cela peut fonctionner dans le monde réel. Quelqu'un a-t-il compris cela?
De Xcode 12, la configuration de la cellule IOS 14 Tabley View:
struct CityCellConfiguration: UIContentConfiguration, Hashable {
var image: UIImage? = nil
var cityName: String? = nil
var fafourited: Bool? = false
func makeContentView() -> UIView & UIContentView {
return CustomContentView(configuration: self)
}
func updated(for state: UIConfigurationState) -> Self {
guard let state = state as? UICellConfigurationState else { return self }
let updatedConfig = self
return updatedConfig
}}
Appliquer la configuration:
private func apply(configuration: CityCellConfiguration) {
guard appliedConfiguration != configuration else { return }
appliedConfiguration = configuration
imageView.isHidden = configuration.image == nil
imageView.image = configuration.image
textLabel.isHidden = configuration.cityName == nil
textLabel.text = configuration.cityName
favouriteButton.isFavourited = configuration.fafourited ?? false
}
Mettre à jour la configuration à l'intérieur de la cellule:
override func updateConfiguration(using state: UICellConfigurationState) {
var content = CityCellConfiguration().updated(for: state)
content.image = "????".image()
if let item = state.item {
content.cityName = item.name
if let data = item.imageData {
content.image = UIImage(data: data)
}
}
contentConfiguration = content
}
Implémente Tableau View Source de données:
extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return cities.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = (tableView.dequeueReusableCell(withIdentifier: Configuration.cellReuseIdentifier) ?? CityTableViewCell(style: .value1, reuseIdentifier: Configuration.cellReuseIdentifier)) as? CityTableViewCell else {
return UITableViewCell(style: .value1, reuseIdentifier: Configuration.cellReuseIdentifier)
}
let city = cities[indexPath.row]
cell.updateWithItem(city)
return cell
}}