我有一个带有不可编辑的,不可选择的UITextView的自定义UICollectionViewCell。在cellForItemAtIndexPath:方法中,我设置了UITextView的attributedText属性,它显示了所有属性。 但是,当我稍后尝试访问该属性文本时(在点击手势识别器的操作方法中),该值为空。
以下是我的代码:
查看控制器:
- (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;
}
收藏视图单元格:
- (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);
}
}
导致输出只是“(null)”。但是,如果我打印UITextView的text属性,它将打印实际文本,而不是属性文本。
我做错了吗?非常感谢任何帮助
谢谢!
答案 0 :(得分:14)
我有同样的问题。我的解决方案是在故事板中启用UITextView可选属性。之后一切都奏效了。
希望有所帮助