Ausgabe
Ich habe eine UILabel
und in einigen Fällen ist der Text länger als die UILabel
selbst, also sehe ich den Text, da ich am Ende der .. "bla bla bla..."
einen Schaltflächentext hinzufügen möchte ....Read More
UILabel
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 , UITextField
oder 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 UITagTapGestureRecognizer
ist nur eine normale UITapGestureRecognizer
Unterklasse mit einer NSInteger
Eigenschaft 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)