在表格中突出显示 UILabel

Posted

技术标签:

【中文标题】在表格中突出显示 UILabel【英文标题】:Highlight UILabel in Table 【发布时间】:2015-08-04 10:13:57 【问题描述】:

在我的UITableView 中,我有不同的控件,例如UIImageUILabel...当我单击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的主要内容,如果未能解决你的问题,请参考以下文章

仅突出显示 UILabel 中的文本

如何在iphone中突出显示UILabel的单词

如何在 UILabel 上仅突出显示触摸文本的背景

突出显示时将 UILabel 字体更改为粗体

目标 C:如何突出显示 tableView 单元格并在重新加载表格时保持突出显示?

在 SwiftUI 中突出显示语音话语