Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

How to replace detected link with custom title for that link?

Offen
#1,776 0 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Anfängerfreundlichkeit
35/100
Issue-Typ
Feature
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
swift
Bereich
mobile

Rechercherichtung

Beginne mit den im Issue gezeigten Einstiegspunkten enabledDetectors, detectorAttributes und MessageKind.attributedText und verfolge anschließend, wie Detector-Treffer zu antippbaren Links werden und didSelectUrl erreichen. Überprüfe das Verhalten anhand des benutzerdefinierten attributierten Texts super link 🌼 und ermittle, was erhalten bleiben muss, damit der angezeigte Titel antippbar bleibt. Erledigt ist es, wenn erkannte URLs den benutzerdefinierten Titel anzeigen und weiterhin didSelectUrl aufrufen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

question

These are my delegate methods for my chat:

    func enabledDetectors(for _: MessageType, at _: IndexPath, in _: MessagesCollectionView) -> [DetectorType] {
        [.url, .phoneNumber]
    }

    func detectorAttributes(
        for _: DetectorType,
        and message: MessageType,
        at _: IndexPath
    ) -> [NSAttributedString.Key: Any] {
        [.underlineStyle: 1, .foregroundColor: isFromCurrentSender(message: message) ? UIColor.white : UIColor.black]
    }

And this is how it looks now:

enter image description here

I have tried to replace attributedString for messageKind like this:

    var kind: MessageKind {
        return .attributedText(attributedString.prettyLinked)
    }

where:

    extension NSAttributedString {
        var prettyLinked: NSAttributedString {
            let mutableString = NSMutableAttributedString(attributedString: self)
            do {
                let detector = try NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue)
                let fullRange = NSRange(location: 0, length: string.utf16.count)
                let matches = detector.matches(in: string, range: fullRange)
                matches.reversed().forEach { match in
                    let range = match.range
                    let link = (string as NSString).substring(with: range)
                    let prettyLink = NSAttributedString(string: "super link 🌼", attributes: [.link: link])
                    mutableString.replaceCharacters(in: range, with: prettyLink)
                }
            } catch {}
            return NSAttributedString(attributedString: mutableString)
        }
    }

The result is like:

enter image description here

But it is not tappable, after that change. Why?

What do I want to achieve is to replace that urls with any string, for example here is super link 🌼. And then didSelectUrl is called as always. Is it possible with MessageKit?

Vorherrschende Sprache
Swift
Sterne
6.3k
Forks
1.2k
Ø Merge
23 Std. 49 Min.
Gemergte PRs (30 T.)
1

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus MessageKit/MessageKit

Alle Issues in MessageKit/MessageKit

Ähnliche Issues

Weitere Issues zu Swift

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.