1

ストーリーボードにテーブル ビュー コントローラーを作成しました。選択した行をクリックしたときに UILabel のテキストの色を緑に変更したい。

私はこのようなことを試みていますが、うまくいきません:

- (void)viewDidLoad {
    [super viewDidLoad];
    menuItems = @[@"home", @"stamp", @"scanner", @"settings"];

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


    NSString *CellIdentifier = [menuItems objectAtIndex:indexPath.row];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Remove seperator inset
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
        [cell setSeparatorInset:UIEdgeInsetsZero];
    }

    // Prevent the cell from inheriting the Table View's margin settings
    if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
        [cell setPreservesSuperviewLayoutMargins:NO];
    }

    // Explictly set your cell's layout margins
    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        [cell setLayoutMargins:UIEdgeInsetsZero];
    }

 NSLog(@"cell  %@",[cell.contentView viewWithTag:1000]);

    return cell;
}
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    NSString *CellIdentifier = [menuItems objectAtIndex:indexPath.row];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(indexPath.row == 0){

        UILabel *menu= (UILabel*)[cell.contentView viewWithTag:1000];
        menu.textColor = [UIColor greenColor];
        NSLog(@"cell clicked: %@",[cell.contentView viewWithTag:1000]);

    }
        //[cell.textLabel setTextColor:[UIColor greenColor]];
       // [self setCellColor:[UIColor greenColor] ForCell:cell];
    [self.tableView reloadData];


}

表のセルにラベルをドラッグし、識別子をホーム、スタンプ、スキャナーに設定し、タグを 1000 に変更しました。

ラベルのテキストの色がまだ同じままで、解決策を提供してくれる理由を誰か教えてもらえますか?

4

3 に答える 3

0
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSString *CellIdentifier = [menuItems objectAtIndex:indexPath.row];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];


    if (selectedRow == 0) {
        UILabel *homeLabel= (UILabel*)[cell.contentView viewWithTag:1000];
        [homeLabel setTextColor:[UIColor colorWithRed:(163/255.f) green:(217/255.f) blue:(33/255.f) alpha:1.0f]];
    }else if (selectedRow == 3){
        UILabel *settingLabel= (UILabel*)[cell.contentView viewWithTag:1400];
        [settingLabel setTextColor:[UIColor colorWithRed:(163/255.f) green:(217/255.f) blue:(33/255.f) alpha:1.0f]];
    }
    if(selectedRow!= indexPath.row){
        UILabel *homeLabel= (UILabel*)[cell.contentView viewWithTag:1000];
        [homeLabel setTextColor:[UIColor whiteColor]];
        UILabel *stampLabel= (UILabel*)[cell.contentView viewWithTag:1200];
        [stampLabel setTextColor:[UIColor whiteColor]];
        UILabel *scannerLabel= (UILabel*)[cell.contentView viewWithTag:1300];
        [scannerLabel setTextColor:[UIColor whiteColor]];
        UILabel *settingLabel= (UILabel*)[cell.contentView viewWithTag:1400];
        [settingLabel setTextColor:[UIColor whiteColor]];

    }

    return cell;
}

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    selectedRow = indexPath.row;
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if(indexPath.row == 0){
        UILabel *homeLabel= (UILabel*)[cell.contentView viewWithTag:1000];
        [homeLabel setTextColor:[UIColor colorWithRed:(163/255.f) green:(217/255.f) blue:(33/255.f) alpha:1.0f]];
        [self.tableView reloadData];
    }
    if(indexPath.row == 1){
        UILabel *stampLabel= (UILabel*)[cell.contentView viewWithTag:1200];
        [stampLabel setTextColor:[UIColor colorWithRed:(163/255.f) green:(217/255.f) blue:(33/255.f) alpha:1.0f]];
        [self.tableView reloadData];

    }
    if(indexPath.row == 2){
        UILabel *scannerLabel= (UILabel*)[cell.contentView viewWithTag:1300];
        [scannerLabel setTextColor:[UIColor colorWithRed:(163/255.f) green:(217/255.f) blue:(33/255.f) alpha:1.0f]];
        [self.tableView reloadData];
    }
    if(indexPath.row == 3){
        UILabel *settingLabel = (UILabel*)[cell.contentView viewWithTag:1400];
        [settingLabel setTextColor:[UIColor colorWithRed:(163/255.f) green:(217/255.f) blue:(33/255.f) alpha:1.0f]];
        [self.tableView reloadData];
    }


}
于 2015-05-15T06:09:18.910 に答える
0

セルに複数のラベルがある場合は、その色を個別に設定する必要があります。メモリにロードされているセルを取得するには、次を使用します

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

条件を削除if(indexPath.row == 0)して、すべてのセルに色を適用します。

ラベルの cell.contentView でループします

(ラベルが複数の場合, タグで取得することもできます. ただし, 各ラベルに一意のタグを適用し, タグ付きのすべてのラベルを取得します.)

for (id thisLabel in cell.contentView.subviews) {
    if ([thisLabel isKindOfClass:[UILabel class]]) {
        UILabel *currentlabel = thisLabel;
        [currentlabel setTextColor:[UIColor greenColor]];
    }
}

ループの上の単一ラベルの場合は機能しますが、タグを使用すると簡単に取得できます

UILabel *currentLabel= (UILabel*)[cell.contentView viewWithTag:1000];
[currentLabel setTextColor:[UIColor greenColor]];
于 2015-05-15T04:25:51.823 に答える
0

didSelectRowAtIndexPath

 UITableViewCell *cell=(UITableViewCell *)[tableView cellForRowAtIndexPath:indexPath.row];
cell.(whatever your label property).textColor=[UIColor greenColor];

これにより、選択したセルのラベルの色が変更されます。

于 2015-05-15T04:15:52.653 に答える