2013-03-18 3 views
12

Я хотел бы добавить пользовательскую кнопку в свои ячейки, которая выполняет ту же функцию, что и функция удаления от ударов. Поэтому, когда вы нажимаете на свою пользовательскую кнопку, она будет скрыта, чтобы появилась официальная красная кнопка «Удалить».Программный запуск кнопки 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; 
    } 
} 

На данный момент моя пользовательская кнопка становится шкуркой при нажатии на них, но официальные красный «Удалить» кнопка не появляется.

Кто-нибудь знает, как с этим справиться?

ответ

5

Я считаю, что кнопка удаления больше обрабатывается 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; 
} 
+6

'[tableView setEditing: YES animated: YES];' вызывает появление красного значка, расположенного слева от ячейки (тот, который позволяет вам отображать красную кнопку «Удалить» справа). И я не хочу этого. Я действительно хочу, чтобы моя пользовательская кнопка напрямую отображала красную кнопку «Удалить» справа. – Yaman

+0

Я полагаю, что это правда. Возможно, что, поскольку вы пытаетесь переопределить ожидаемое поведение, вам может потребоваться пройти полное расстояние и обработать кнопку удаления. –

+0

Я боялся, что это будет единственный способ ... Thx за вашу помощь Райан. – Yaman

-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]; 
    } 
} 
+0

неподходящий ответ. –

+0

Не отвечает на вопрос. – Camsoft

1

Я не нашел подходящего решения по этому вопросу, поэтому я сделал свой собственный. Я сделал фальшивую кнопку удаления, и она очень похожа на оригинальную. Здесь я показываю сложную часть кнопки удаления.

Если вы хотите знать, как заменить по умолчанию минус (удалить) управления редактирования, есть хорошая статья об этом, я рекомендую: 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  
     } 

    }) 


} 

Мы не хотим, чтобы переместить вид контента, как я обнаружил, что, если наша кнопка не на выше содержания взгляд это неприкасаемый, у меня есть некоторые мысли, почему, но не уверен. Если вы знаете, почему, пожалуйста, добавьте эту информацию в комментарии, я бы с удовольствием это узнал.

Я также хочу отметить, что если вы используете автозапуск как меня, вам нужно изменить ограничения в анимации, а не на кадре, так что вам может не понадобиться часть extend.

Смежные вопросы