setAccessoryViewしただけだとタップした時にaccessoryButtonTappedForRowWithIndexPathが発火しなくなるので以下のようにする。
// create cell - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // call cell UITableViewCellFixed *cell = (UITableViewCellFixed *)[tableView dequeueReusableCellWithIdentifier:@"table_cell"]; if (cell == nil) {// create cell cell = [[[UITableViewCellFixed alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"table_cell"] autorelease]; } UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; [button setFrame:CGRectMake(0, 0, 26, 26)]; [button setBackgroundImage:[UIImage imageNamed:@"arrow.png"] forState:UIControlStateNormal]; [button setBackgroundColor:[UIColor clearColor]]; [button addTarget:self action:@selector(accessoryButtonTapped:withEvent:) forControlEvents:UIControlEventTouchUpInside]; [cell setAccessoryView:button]; return cell; } - (void)accessoryButtonTapped:(UIControl *)button withEvent:(UIEvent *)event { NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:[[[event touchesForView: button] anyObject] locationInView:self.tableView]]; if (indexPath == nil) { return; } [self.tableView.delegate tableView: self.tableView accessoryButtonTappedForRowWithIndexPath:indexPath]; }