0
votes

Swift: Comment puis-je réaliser une couleur d'arrière-plan à une TableView TextLabel

Je travaille avec la TableView et j'espérais ajouter une couleur d'arrière-plan au texte de la cellule sélectionnée. Quelque chose comme ceci:

L'image représente une cellule, la couleur d'arrière-plan est séparée. C'est ce qui est nécessaire. P>

 Entrez la description de l'image ici J'ai essayé de faire ce qui suit mais il ajoute une couleur d'arrière-plan à la cellule entière ou au texte uniquement. P>

La séparation entre est le plus important, l'ajout d'un arrière-plan applique une couleur à la cellule entière, ce qui n'est pas Recherché. P>

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {  //Highlighting text - Add saving text
    let cell = tableView.cellForRow(at: indexPath)
    print("You selected cell number: \(indexPath.row)!")
    cell?.textLabel?.textColor = .yellow
    cell?.textLabel?.backgroundColor = .yellow // Is not desired outcome
}


3 commentaires

Ce n'est pas comme ça ce que tu penses. Pour être plus clair, essayez de régler la couleur d'arrière-plan sur cellule et textlabel , puis voir la différence.


En fait, vous avez besoin de attribuétext et non du texte uniquement. Donc, Google pour attribuétext pour l'étiquette et il résoudra votre problème. Votre titre de question est trompeur.


cellule? .TextLabel? .BackgroundColor = .Yellow ne définit pas la cellule entière. Il ne définit que l'étiquette. Bien sûr, il pourrait être que l'étiquette couvre la majeure partie de la cellule.


4 Réponses :


3
votes

Votre image montre un textlabel code> avec jaune code> couleur de fond et noir code> couleur texte.

Si vous essayez de changer la couleur de fond , il devrait être p> xxx pré>

cellule? .TextLabel? .textcolor = uicolor.yellow code> est utilisé pour modifier la couleur du texte et non la couleur d'arrière-plan. P>

( https://www.youtube.com/watch?v= DCC5MKKPFUA . Cela vous aidera) P>

let searchString = "Lorem Lorem"
 let baseString = "Ipsum Ipsum Ipsum Ipsum Ipsum Ipsum Ipsum Ipsum"



let attributed = NSMutableAttributedString(string: baseString)
    do
    {
        let regex = try! NSRegularExpression(pattern: searchString,options: .caseInsensitive)
        for match in regex.matches(in: baseString, options: NSRegularExpression.MatchingOptions(), range: NSRange(location: 0, length: baseString.characters.count)) as [NSTextCheckingResult] {
            attributed.addAttribute(NSBackgroundColorAttributeName, value: UIColor.yellow, range: match.range)
        }
        self.txtView.attributedText = attributed
    }


3 commentaires

Bonjour, cela ajoute une couleur de fond jaune à la cellule entière, ce qui n'est pas ce que je veux. J'ai besoin que la couleur de fond soit spécifique au texte. Tout comme dans la photo!


@ N.der Oh, maintenant je l'obtiens. Vous avez oublié de mentionner que votre label remplit toute votre cellule. Je suppose que votre étiquette a la même taille que la cellule entière? En utilisant cela, votre cellule a toujours un arrière-plan blanc, mais le problème est que votre étiquette remplit la cellule entière et la modification de la couleur de fond de l'étiquette, il ressemble à la couleur de la cellule modifiée. Pour cela, vous devez utiliser attribuétext


Pouvez-vous expliquer la recherchetring et son utilisation



0
votes

Vous devez d'abord ajouter une variable globale pour identifier quelle cellule est sélectionnée.

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        var cell= (tableView.dequeueReusableCell(withIdentifier: "cellIdentifier") as! YourCell)

        if self.selectedIndex == indexPath.row
        {
           cell?.textLabel?.backgroundColor = UIColor.yellow
        }
        else
        {
            cell?.textLabel?.backgroundColor = UIColor.yellow
        }

       return cell!
    }


1 commentaires

Bonjour, cela ajoute une couleur de fond jaune à la cellule entière, ce qui n'est pas ce que je veux. J'ai besoin que la couleur de fond soit spécifique au texte. Tout comme dans la photo! La séparation entre est la clé.



0
votes

L'utilisateur thetiger est correct. Tout ce que vous avez besoin pour apprendre est de définir attributétext d'étiquette . J'ai travaillé sur des tonnes d'applications bibliques avec une même fonctionnalité de verset.

De ce que je peux me rappeler, le nom de l'attribut est le suivant: nsbackgroundColorattributename . Bonne chance!


0 commentaires

1
votes

Modifier le code ci-dessous à utiliser selon votre condition

 cell?.textLabel?.attributedText = self.decorateText(myTxtOne: "Use this", myTxtTwo: " Code")


func decorateText(myTxtOne:String, myTxtTwo:String)->NSAttributedString{
    let textAttributeOne = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.backgroundColor: UIColor.blue, NSAttributedStringKey.font: UIFont(name: "Poppins-Regular", size: 12.0)!] as [NSAttributedStringKey : Any]
let textAttributeTwo = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.backgroundColor: UIColor.yellow, NSAttributedStringKey.font: UIFont(name: "Poppins-Regular", size: 12.0)!] as [NSAttributedStringKey : Any]

    let textPartOne = NSMutableAttributedString(string: myTxtOne, attributes: textAttributeOne)
    let textPartTwo = NSMutableAttributedString(string: myTxtTwo, attributes: textAttributeTwo)

    let textCombination = NSMutableAttributedString()
    textCombination.append(textPartOne)
    textCombination.append(textPartTwo)
    return textCombination
}


1 commentaires

Une bonne réponse fournit une explication. S'il vous plaît, ne postez pas de réponses sur le code seulement.