日別アーカイブ: 05/28/2013

UITableView delegate methods

ハマったーいむ とぅーるるるっ

今日の浜ちゃん

UITableViewのUITableViewCellの中のフォントを変えたいんです。ふぉんとにすごく簡単なこと。コードはこんな感じ

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = @"cell";
    UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }

    UIFont *myFont = [UIFont fontWithName:@"Meiryo" size:8.0f];
    cell.textLabel.font = myFont;
    
    return cell;
}

しかーし、実行してみるとちっとも小さくなっていない。もしかして、小さくなっているけど私が認識していないだけ?とか思ってフォントサイズを2.0fとか極端に小さくしちゃったりしてね。でも変わらない!!なぜだ。あーイライラする

と思ってコードを見渡すと違う箇所でこんな事してた、自分

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.backgroundColor = [UIColor whiteColor];
    cell.textLabel.font = [UIFont fontWithName:@"Meiryo" size:12.0f];
    UIView *bgColorView = [[UIView alloc] init];
    [bgColorView setBackgroundColor:[UIColor colorWithRed:41/255.0f green:47/255.0f blue:61/255.0f alpha:1.0f]];
    [cell setSelectedBackgroundView:bgColorView];
}

あー、いつしか昔、何故か忘れたけど、cellの外観を統一するためにwillDisplayCell:をオーバーライドしていたのであった。これはcellが表示される直前に呼び出されるので当然cellForRowAtIndexPath:より後に実行されるのでいくらcellForRowAtIndexPath:の中でフォント変えても意味なかったんだった。ふぉんとバカねぇ、あんた!!

一つのControllerの中のコードが多くなってくると、こういった罠に陥りやすいので注意が必要。特にXcodeを使っていると長いメソッドとか滅多に改修しないコードは折りたたんで非表示にしてしまっているケースもありえるので、さらに注意が必要。私自信は折りたたみ機能は使わないが

これからはもっと#pragma markをうまく使ってソースコードの可読性をよくするように心がけよう

たまにクライミングジムに行くとこういうズボン履いてる人いるよね。登りやすいのかな~?見てるとホールドに引っかかりそうで