Программно запускать кнопку UITableViewCell "Удалить"
Я хотел бы добавить пользовательскую кнопку в своих ячейках, которая выполняет ту же функцию, что и функция удаления от ударов. Поэтому, когда вы нажимаете на свою пользовательскую кнопку, она будет скрыта, чтобы появилась официальная красная кнопка "Удалить".
Итак, я сделал что-то вроде этого:
/// Controller.m
///
/// @brief Delete icon button pressed. Trigger display of Delete full button
///
- (IBAction)deleteDrug:(id)sender event:(id)event {
NSIndexPath *indexPath = [self indexPathForButton:sender event:event];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
[cell setEditing:YES animated:YES];
}
/// CustomCell.m
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:animated];
// hide / show "modify" button when entering in edit mode
switch (editing) {
case YES:
self.deleteButton.hidden = YES;
break;
case NO:
self.deleteButton.hidden = NO;
break;
default:
break;
}
}
В этот момент моя пользовательская кнопка становится скрытой при нажатии на них, но официальная красная кнопка "Удалить" не появляется.
Кто-нибудь знает, как с этим справиться?
Ответы
Ответ 1
Я считаю, что кнопка удаления больше обрабатывается tableView. Поэтому, вместо того, чтобы настраивать редактирование вашей ячейки, вам может потребоваться, чтобы tableView знал, что он должен редактировать.
- (IBAction)deleteDrug:(id)sender event:(id)event {
selectedButtonIndex = [self indexPathForButton:sender event:event];
[tableView setEditing:YES animated:YES];
}
Поэтому вам может понадобиться сделать что-то вроде настройки tableView для редактирования. Затем в вашем источнике данных tableview вы можете реализовать этот метод, где selectedButton является указательным путем для соответствующей ячейки.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath == selectedButtonIndex) {
return YES;
}
return NO;
}
Вам может потребоваться реализовать этот метод для вашего источника данных.
- (UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleDelete;
}
Ответ 2
Я не нашел подходящего решения этого вопроса, поэтому я сделал свой собственный. Я сделал фальшивую кнопку удаления, и она очень похожа на оригинальную. Здесь я показываю сложную часть кнопки удаления.
Если вы хотите знать, как заменить элемент управления по умолчанию минус (удалить), есть хорошая статья об этом, я рекомендую: http://vinsol.com/blog/2015/01/06/custom-edit-control-for-uitableviewcell/
Итак, предположим, что вы сделали первую часть статьи, и хотите нажать кнопку удаления, когда нажата кнопка пользовательского редактирования. Код находится в Swift, но вы можете использовать те же шаги, чтобы сделать это в Objective-C
func deleteButtonShow(){
let deleteButton = UIButton(frame: CGRect(x: self.frame.width, y: 0, width: 80, height: self.frame.height))
deleteButton.backgroundColor = UIColor.redColor() // ! note: original delete have another color
deleteButton.setTitle("Delete", forState: UIControlState.Normal)
deleteButton.setTitleColor(UIColor.whiteColor(), forState: .Normal)
deleteButton.addTarget(self, action: "actionForDelete", forControlEvents: UIControlEvents.TouchUpInside)
// action for your button will call delegate that will do the delete work. in most cases
self.contentView.addSubview(deleteButton)
var movedSubviews = self.subviews
var i = 0
for subview in movedSubviews {
// NOTE: I added tag = 1 in the storyboard to Content View of my cell
if subview.tag == 1 {
movedSubviews.removeAtIndex(i) // we don't need to move it.
break
}
++i
}
movedSubviews.extend(self.contentView.subviews)// add subviews from content view
UIView.animateWithDuration(0.3, animations: { () -> Void in
for movedView in movedSubviews as! [UIView] {
movedView.frame = CGRect(origin: CGPoint(x: movedView.frame.origin.x - 80, y: movedView.frame.origin.y), size: movedView.frame.size)
//animate the things
}
})
}
Мы не хотим перемещать контент-представление, поскольку я обнаружил, что если наша кнопка не находится на вышеуказанном представлении контента, она неприкасаема, у меня есть некоторые мысли, почему, но не уверен. Если вы знаете, почему, пожалуйста, добавьте эту информацию в комментарии, я хотел бы ее узнать.
Я также хочу отметить, что если вы используете autolayout как мне, вам нужно изменить ограничения в анимации, а не на кадре, так что вам может не понадобиться extend
часть.
Ответ 3
пожалуйста, сделайте это, чтобы работать с кнопкой удаления в правой части UITableViewcell.
- (void)tableView:(UITableView *)tableView
commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil]
withRowAnimation:UITableViewRowAnimationTop];
[self.**yourarray** removeObjectAtIndex:indexPath.row];
[tableView endUpdates];
[tableView reloadData];
}
}