UITableViewCell
強調表示されたときに何が起こるかを制御したい。
次のようにiOS 6.0で可能であることを私は知っています:
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
しかし、5.0 以上をターゲットにしている場合、どうすればよいでしょうか?
UITableViewCell
強調表示されたときに何が起こるかを制御したい。
次のようにiOS 6.0で可能であることを私は知っています:
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
しかし、5.0 以上をターゲットにしている場合、どうすればよいでしょうか?
iOS 5 での最良のオプションは、この方法を使用することです。
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
このメソッドは、ユーザーがタップしてからセルから指を離した場合にのみ呼び出されますが (ここで説明されているように)、5.x と 6.x の両方で使用できる他のメソッドを認識していません。
カスタム UITableViewCell がある場合は、オーバーライドできます
-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
セル上でタッチが押されたとき (highlighted
パラメータは YES になります)、タッチがアップまたはキャンセルされたとき (highlight
パラメータは NO) に呼び出されるメソッドです。
また、このアプローチは iOS 3.0 以降で機能します。
私のプロジェクトの1つでは、ユーザーがセルに触れるとすぐに画像を強調表示する必要があったため、このようにIos 5.0で強調表示状態を実装しました。これらの関数は、カスタム セル クラスで記述されます。必要に応じてこれらの関数を変更します。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self hightlightImage];
[self performSelector:@selector(detecetedLongTap) withObject:nil afterDelay:1.0];
[super touchesBegan:touches withEvent:event];
}
-(void)detecetedLongTap{
[self hightlightImage];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesMoved:touches withEvent:event];
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
if (titleLabel.textColor == [UIColor blackColor])
[self hightlightImage];
[super touchesEnded:touches withEvent:event];
}