Put your feet on the ground

主にプログラミングのお話。

UITableViewCellにaddSubviewしたUIButtonがタップしても反応してくれなかった

原因は単純だったしたいした事じゃなかったんですけどとりあえずなんでも気づいたらoutputしようと思ったのでメモ。

 

 

カスタムセルの右端にボタンを設置して、ボタンをタップすると別画面に遷移する。ボタンは画像をセットする。
 

CustomCell.m

@property (nonatomic) UIButton *button

~略~

- (void) hoge{

    self.button.frame = CGRectMake(CGRectGetWidth(self.contentView.frame) - 20,
                                                   10 //適当
                                                   15,
                                                   15);

    UIImageView *buttonImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"hoge.png"]] ;
    buttonImage.frame = CGRectMake(0,0,15,15);
      
    [UIButton addSubview:buttonImage];

    [self.contentView addSubview:button]

}
        

 

適当だけど上記みたいに。

だけどいくらタップしても反応せず。
 
結論から言うと、ボタンが小さく、反応がすこぶる悪くなっていただけでした。
 UIButtonのsizeを25*25にしてボタンの範囲を広くすると、反応するようになりました。
 

- (void) hoge{

        self.button.frame = CGRectMake(CGRectGetWidth(self.contentView.frame) - 20,

                                                               10 //適当

                                                               25, //ボタン範囲を広げた

                                                               25    //ボタン範囲を広げた

                                                              );

      UIImageView *buttonImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"foo.png"]] ;

      buttonImage.frame = CGRectMake(0,0,15,15);

     [UIButton addSubview:buttonImage];

    [self.contentView addSubview:button]

}

まあ単純に反応できるように大きくしろよって話だったんですけど、
画像はそのぐらいの大きさで表示させたかったので。
 
他のViewに重なってボタンが押せないとか、そういうのでなければ、
単純にタップできてない、って可能性を考える頭がなかった。
 
  • ButtonをbringSubviewToFrontしたりとか、
  • [self.contentView setUserInteractionEnabled: NO]したりとか、
  • 親ビューからボタンがはみ出してないかとか、
色々やってダメだったら領域に問題があるってのも考える。
 
…そもそもUIButtonにsetImageでなくimageViewをaddSubviewするのが
いいやり方なのかどうかがわかってないですが。