読者です 読者をやめる 読者になる 読者になる

hachinoBlog

hachinobuのエンジニアライフ

UITableViewCellにaddSubViewしたViewを変更するやり方

xibファイルでカスタムセルを作成した。
セルにはボタンビューを載せて、そのボタンがタッチされる度にボタンの色が変わるようにする。
その時につまづいたのでメモ

- (void)doCellStarButtonTapped:(id)sender event:(id)event
{
 	NSSet *touches = [event allTouches];
	UITouch *touch = [touches anyObject];
        CGPoint currentTouchPosition = [touch locationInView:aTableView];
        CGPoint position = [touch locationInView:self.view];

        //タッチ位置からNSIndexPathを取得してセル情報を取得する
	NSIndexPath *indexPath = [aTableView indexPathForRowAtPoint: currentTouchPosition];
        UITableViewCell *cell = [aTableView cellForRowAtIndexPath:index];
       
        //取得したセル情報
        for (UIView *view in cell.subviews) {
            if ([[[view class] description] isEqualToString:@"UITableViewCellContentView"]) {
                for (UIView *btnView in view.subviews) {
                    if ([btnView isMemberOfClass:[UIButton class]]) {
                        [(UIButton *)btnView setSelected:checked];
                    }
                }
            }
        }
}

ここで注目すべきは取得したcellにsubviewsすると返却されたclassがUITableViewCellContentViewだということ。
てっきりcellに対してsubviewsすればお目当てのボタンクラスが返ってくると思っていた。
しかもUITableViewCellContentViewなんてクラスは存在しないのでisMemberOfClassが使えない。
そこで[[[view class] description] isEqualToString:@"UITableViewCellContentView"]と文字列として比較した。
UITableViewCellContentViewに対してsubviewsしたらお目当てのボタンクラスがありました。
それにしてもUITableViewCellContentViewって何だろう..