Ho un UICollectionViewCell personalizzato con UITextView non modificabile e non selezionabile. Nel metodo cellForItemAtIndexPath: metodo, imposto la proprietà attributeText di UITextView e viene visualizzato correttamente con tutti gli attributi. Tuttavia, quando provo ad accedere a quel testo attribuito in un secondo momento (nel metodo di azione di un rilevatore di gesti di tocco), il valore è nullo.Il testo attribuito UITextView è nullo dopo essere stato impostato
Ecco ciò che il mio codice è simile:
View Controller:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
TNCommentCollectionViewCell *commentCell = [collectionView dequeueReusableCellWithReuseIdentifier:kCommentCellIdentifier
forIndexPath:indexPath];
TNComment *comment = [self.comments objectAtIndex:indexPath.row];
commentCell.textView.attributedText = [self commentStringForComment:comment];
return commentCell;
}
- (NSAttributedString *)commentStringForComment:(DAFeedComment *)comment
{
NSString *usernameString = [NSString stringWithFormat:@"@%@", comment.username];
NSDictionary *usernameAttributes = @{ NSForegroundColorAttributeName : [UIColor usernameColor],
NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Light" size:14.0f] };
NSAttributedString *attributedUsernameString = [[NSAttributedString alloc] initWithString:usernameString attributes:usernameAttributes];
NSMutableAttributedString *labelString = [attributedUsernameString mutableCopy];
NSDictionary *commentAttributes = @{ NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Light" size:14.0f] };
[labelString appendAttributedString:[[NSAttributedString alloc] initWithString:@" "]];
[labelString appendAttributedString:[[NSAttributedString alloc] initWithString:comment.comment attributes:commentAttributes]];
return labelString;
}
Collezione vista di cella:
- (void)awakeFromNib
{
[super awakeFromNib];
self.textView.textContainerInset = UIEdgeInsetsZero;
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(textViewTapped:)];
tapGesture.numberOfTapsRequired = 1;
[self.textView addGestureRecognizer:tapGesture];
}
- (void)textViewTapped:(UITapGestureRecognizer *)recognizer
{
UITextView *textView = (UITextView *)recognizer.view;
NSLayoutManager *layoutManager = textView.layoutManager;
CGPoint location = [recognizer locationInView:textView];
location.x -= textView.textContainerInset.left;
location.y -= textView.textContainerInset.top;
NSUInteger characterIndex = [layoutManager characterIndexForPoint:location
inTextContainer:textView.textContainer
fractionOfDistanceBetweenInsertionPoints:nil];
if(characterIndex < textView.textStorage.length)
{
NSLog(@"%@", textView.attributedText);
}
}
che porta ad una potenza di solo "(null)". Se stampo la proprietà text di UITextView, tuttavia, stamperà il testo attuale, ma non il testo attribuito.
Sto facendo qualcosa di sbagliato? Gradirei davvero qualsiasi aiuto
Grazie!
Fare qualcosa di sbagliato? Sì, non hai incluso il codice per "commentStringForComment". –
Modificato per includere il codice per quel metodo. Non l'ho incluso in origine perché sapevo già che il valore restituito era valido a causa del fatto che la stringa attribuita veniva visualizzata correttamente. – ryanthon