[FIXED] Fügen Sie “…Weiterlesen” am Ende von UILabel hinzu

Ausgabe

Ich habe eine UILabelund in einigen Fällen ist der Text länger als die UILabelselbst, also sehe ich den Text, da ich am Ende der .. "bla bla bla..."einen Schaltflächentext hinzufügen möchte ....Read MoreUILabel

Ich habe einige Beiträge gelesen, aber sie bieten Lösungen an, die für mich nicht gut sind, zum Beispiel: um zu berechnen, wie viele Zeichen in das eingegeben werden UILabel, aber mit der Schriftart, die ich verwende, hat jedes Zeichen eine andere Breite.

Wie kann ich das schaffen?

Danke im Voraus!

Lösung

Ich habe also Folgendes getan, um die Schaltfläche „Weiterlesen…“UITextView zu , UITextFieldoder hinzuzufügen UILabel:

- (void)addReadMoreStringToUILabel:(UILabel*)label
{
    NSString *readMoreText = @" ...Read More";
    NSInteger lengthForString = label.text.length;
    if (lengthForString >= 30)
    {
        NSInteger lengthForVisibleString = [self fitString:label.text intoLabel:label];
        NSMutableString *mutableString = [[NSMutableString alloc] initWithString:label.text];
        NSString *trimmedString = [mutableString stringByReplacingCharactersInRange:NSMakeRange(lengthForVisibleString, (label.text.length - lengthForVisibleString)) withString:@""];
        NSInteger readMoreLength = readMoreText.length;
        NSString *trimmedForReadMore = [trimmedString stringByReplacingCharactersInRange:NSMakeRange((trimmedString.length - readMoreLength), readMoreLength) withString:@""];
        NSMutableAttributedString *answerAttributed = [[NSMutableAttributedString alloc] initWithString:trimmedForReadMore attributes:@{
                                                                                                                                        NSFontAttributeName : label.font
                                                                                                                                        }];

        NSMutableAttributedString *readMoreAttributed = [[NSMutableAttributedString alloc] initWithString:readMoreText attributes:@{
                                                                                                                                        NSFontAttributeName : Font(TWRegular, 12.),
                                                                                                                                        NSForegroundColorAttributeName : White
                                                                                                                                        }];

        [answerAttributed appendAttributedString:readMoreAttributed];
        label.attributedText = answerAttributed;

        UITagTapGestureRecognizer *readMoreGesture = [[UITagTapGestureRecognizer alloc] initWithTarget:self action:@selector(readMoreDidClickedGesture:)];
        readMoreGesture.tag = 1;
        readMoreGesture.numberOfTapsRequired = 1;
        [label addGestureRecognizer:readMoreGesture];

        label.userInteractionEnabled = YES;
    }
    else {

        NSLog(@"No need for 'Read More'...");

    }
}

Es gibt eine Verwendungsmethode , die hierfitString:intoLabel zu finden ist .

Das UITagTapGestureRecognizerist nur eine normale UITapGestureRecognizerUnterklasse mit einer NSIntegerEigenschaft namens tag. Ich habe das getan, weil ich feststellen möchte, welche Read More...angeklickt wurden, falls ich mehr als eine in der gleichen habe UIViewController. Sie können eine normale verwenden UITapGestureRecognizer.

Genießen!


Beantwortet von –
ytpm


Antwort geprüft von –
Clifford M. (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like