在表格中突出显示 UILabel
Posted
技术标签:
【中文标题】在表格中突出显示 UILabel【英文标题】:Highlight UILabel in Table 【发布时间】:2015-08-04 10:13:57 【问题描述】:在我的UITableView
中,我有不同的控件,例如UIImage
、UILabel
...当我单击UILabel
时,必须突出显示文本的颜色。任何人都可以帮助我吗?这是下面的代码。
UITapGestureRecognizer* gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(UserNameClick:)];
[cell.usrName setUserInteractionEnabled:YES];
[cell.usrName addGestureRecognizer:gesture];
cell.usrName.tag=indexPath.row;
- (IBAction)UserNameClick:(id)sender
UITapGestureRecognizer *tapRecognizer = (UITapGestureRecognizer *)sender;
NSString *strUserID,*strUsername;
NSDictionary *dictionary = [self.allPostArray objectAtIndex:[tapRecognizer.view tag]];
【问题讨论】:
要显示 UITableView 元素的变化,你必须重新加载 tableview。因此,您必须在“cellForRowAtIndexPath”中设置标签颜色更改,并且您还必须保存最后选择/当前选择的索引才能在 tableview 中获得所需的更改.. 不用轻拍也可以 我还为您发布了我的工作演示应用程序代码 Subramanian Raj 将按钮放在表格视图上,并在单击按钮或单元格时更改背景颜色.. 【参考方案1】:我不知道你到底在哪里做错了?但是使用下面的代码你可以得到答案。
First create
UILabel *label;
UITapGestureRecognizer* gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(UserNameClick:)];
gesture.numberOfTapsRequired = 1
[cell.usrName setUserInteractionEnabled:YES];
[cell.usrName addGestureRecognizer:gesture];
cell.usrName.tag=indexPath.row;
//Assign cell.usrName to label
label = cell.usrName;
- (IBAction)UserNameClick:(UITapGestureRecognizer*)sender
NSString *strUserID,*strUsername;
label.textColor=[UIColor redColor];
NSDictionary *dictionary = [self.allPostArray objectAtIndex:[sender.view tag]];
You have to set gesture.numberOfTapsRequired = 1
【讨论】:
- (IBAction)UserNameClick:(id)sender 在这个函数中我们必须改变 cell.usrName 标签的颜色...我不知道该怎么做 点击对标签起作用,没有问题,我的问题是,当用户点击标签时,标签文本必须以红色突出显示 现在是否要将文本颜色更改为红色? 标签或标签文本颜色为红色? 让我们continue this discussion in chat。【参考方案2】:试试这个代码
- (IBAction)UserNameClick:(id)sender
UITapGestureRecognizer *tapRecognizer = (UITapGestureRecognizer *)sender;
NSString *strUserID,*strUsername;
NSDictionary *dictionary = [self.allPostArray objectAtIndex:[tapRecognizer.view tag]];
//your custom cell object
UITableViewCell *cell = (UITableViewCell *)sender.superview.superview;
cell.label.textColor = your color;
【讨论】:
在UITableView中会有更多的单元格,通过你的方法,我们不会知道标签文本必须在哪个tablecell中突出显示。 你可以给每个单元格添加标签并检查哪个单元格是那个..! @RahulShirphule apple in session 231 "Cocoa touch best practice" from WWDC 2015 建议不要使用视图标记:) 在这种情况下,您可以在单元格对象上使用 isKindOfClass,然后更改标签的颜色【参考方案3】:我希望这可能对其他人有所帮助...突出显示 TabelCell 中的 UILabel 我们必须这样做
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
if (highlighted)
self.usrName.textColor = [UIColor redColor];
else
self.usrName.textColor = [UIColor grayColor];
【讨论】:
【参考方案4】:为最后选择/当前选择的索引设置起始值
self.prvSelectedIndex = -1;
self.currentSelectedIndex = 0;
像这样修改 cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
静态 NSString *cellIdentifier = @"MyTableViewCell";
MyTableViewCell *cell = (MyTableViewCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil)
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyTableViewCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
// DataSourceModel* dbObject = (DataSourceModel*)[self.arrayDataSource objectAtIndex:indexPath.row]; cell.myCellLabel.text = [NSString stringWithFormat:@"%@",self.arrayDataSource[indexPath.row]]; int indexed = (int)indexPath.row; cell.myCellLabel.tag = 索引+1;
cell.myCellLabel.textColor = [UIColor blackColor];
if (indexed==self.currentSelectedIndex)
cell.myCellLabel= (UILabel*)[cell viewWithTag:indexed+1];
cell.myCellLabel.textColor = [UIColor redColor];
return cell;
更新上一个和上一个选定的索引
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
if (self.prvSelectedIndex!=indexPath.row)
self.prvSelectedIndex = self.currentSelectedIndex=(int)indexPath.row;
self.currentSelectedIndex = (int)indexPath.row;
[self.refWeakTableView reloadData];
【讨论】:
以上是关于在表格中突出显示 UILabel的主要内容,如果未能解决你的问题,请参考以下文章