Вам нужно будет управлять на одну ячейку больше, чем количество элементов массива. Поэтому обязательно внесите следующие изменения в реализацию источника данных табличного представления:
// return the correct row count
-(NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section {
return [theArray count] + 1;
}
// detect the last cell and add it a subview
-(UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
...
// detect the last row
if(indexPath.row == [theArray count]) {
UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom];
// set the frame and title you want
[b setFrame:CGRectMake(0, 0, 50, 50)];
[b setTitle:@"button" forState:UIControlStateNormal];
// set action/target you want
[b addTarget:self
action:@selector(theActionYouWant:)
forControlEvents:UIControlEventTouchDragInside];
[cell addSubview:b];
}
else {
// configure a classic cell
}
return cell;
}
// the action method
-(void)theActionYouWant:(id)sender {
// handle the action
}
В качестве альтернативы, почему бы просто не использовать всю ячейку для выполнения действия? Используйте тот же механизм для управления еще одной ячейкой, установите для нее собственную метку, и, когда вы обнаружите, что ячейка выбрана, отправьте сообщение:
-(void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if([indexPath row] == [theArray count]) {
// the extra cell is selected, send a message
}
else {
// others cells selection handler
}
}