我希望能够在点击(选中/突出显示)时更改UITableView单元格中的文本。每个单元格的内容都来自NSAttributedString。这是代码:
-(NSAttributedString*)formattedSubject:(int)state {
if(formattedSubject!=nil) return formattedSubject;
NSDictionary *boldStyle = [[NSDictionary alloc] init];
if(state==1) {
boldStyle = @{NSFontAttributeName:[UIFont fontWithName:@"Helvetica-Bold" size:16.0],NSForegroundColorAttributeName:[UIColor colorWithRed:0.067 green:0.129 blue:0.216 alpha:1.0]};
}
else {
boldStyle = @{NSFontAttributeName:[UIFont fontWithName:@"Helvetica-Bold" size:16.0],NSForegroundColorAttributeName:[UIColor whiteColor]};
}
NSDictionary* normalStyle = @{NSFontAttributeName: [UIFont fontWithName:@"Helvetica" size:14.0]};
NSMutableAttributedString* articleAbstract = [[NSMutableAttributedString alloc] initWithString:subject];
[articleAbstract setAttributes:boldStyle range:NSMakeRange(0, subject.length)];
[articleAbstract appendAttributedString:[[NSAttributedString alloc] initWithString:@"\n"]];
int startIndex = [articleAbstract length];
NSTimeInterval _interval=[datestamp doubleValue];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:_interval];
NSDateFormatter *_formatter=[[NSDateFormatter alloc]init];
[_formatter setDateFormat:@"MM/dd/yy"];
NSString* description = [NSString stringWithFormat:@"By %@ on %@",author,[_formatter stringFromDate:date]];
[articleAbstract appendAttributedString:[[NSAttributedString alloc] initWithString: description]];
[articleAbstract setAttributes:normalStyle range:NSMakeRange(startIndex, articleAbstract.length - startIndex)];
formattedSubject = articleAbstract;
return formattedSubject;
}
如您所见,我希望boldStyle
文本在状态为“1”时为某种颜色(由[UIColor colorWithRed:0.067 green:0.129 blue:0.216 alpha:1.0]
给出),否则为白色。我目前在cellForRowAtIndexPath
以及didSelectRowAtIndexPath
:
的cellForRowAtIndexPath:
NSIndexPath *path = [tableView indexPathForSelectedRow];
if(path) {
cell.textLabel.attributedText = [news formattedSubject:1];
}
else {
cell.textLabel.attributedText = [news formattedSubject:0];
}
我在这里做的是检查是否选择了一个单元格,如果是,那么我将该单元格的“attributedText”更改为“0”格式。但是,这不起作用,我怀疑这是因为必须在实际选择单元格时进行修改。所以我在didSelectRowAtIndexPath
中尝试了以下内容:
didSelectRowAtIndexPath方法:
News *news = newsArray[indexPath.row];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.textLabel.attributedText = [news formattedSubject:0];
然而,似乎永远不会改变。我在NSLog
if / else语句的“else”部分放了一个boldStyle
,它从未写入控制台。
我对解决方案的尝试都没有奏效,而且我已经没有想法了。如何突出显示单元格时如何更改NSAttributedString
?
更新:有趣的是normalStyle
文字,默认情况下为黑色, 在我添加{时突出显示/选中单元格时变为白色{1}}中的{1}},但cell.textLabel.highlightedTextColor = [UIColor whiteColor];
文字没有。{/ p>
答案 0 :(得分:1)
我有同样的问题,而且......
cell.textLabel.enable = NO;
刚刚解决了
答案 1 :(得分:0)
在 cellForRowAtIndexPath 方法中,您正在检查此tableView中是否存在selectedIndexPath。
NSIndexPath *path = [tableView indexPathForSelectedRow];
if(path) {
我认为您想要比较indexPath和selectedIndexPath。你应该使用isEqual:为此。
NSIndexPath *selectedIndexPath = [tableView indexPathForSelectedRow];
if([selectedIndexPath isEqual:indexPath]) {