2013-06-02 4 views
1

У меня есть табличное представление с несколькими пользовательскими ячейками. Внутри первой есть кнопка. Когда эта кнопка нажата, я хочу прокрутить до определенной секции в моем представлении таблицы. Как мне связать действие кнопки с табличным представлением?scrollToRowAtIndexPath при нажатии кнопки внутри UITableViewCell

ответ

1

Вы можете сделать кнопку вашей ячейки свойства и cellForRowAtIndexPath вы можете установить цели в классе, который загружает таблицу так что вам не нужны делегаты. Что-то вроде этого:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

     static NSString *identifier = @"YourCellIdentifier"; 
     YourCustomCell *cell =[tableView dequeueReusableCellWithIdentifier:identifier]; 
     if(cell == nil) { 
      cell = [YourCustomCell alloc/init method.... 
      [cell.buttonProperty addTarget:self action:@selector(cellButtonTapped:) 
            forControlEvents:UIControlEventTouchUpInside]; 
     } 
     //do other stuff with your cell 
} 

-(void)cellButtonTapped:(id)sender { 
    UIButton *button = (UIButton*)sender; 
    YourCustomCell *cell = (YourCustomCell*)button.superview.superview; //if the button is added to cell contentView or button.superview is added directly to the cell 

    NSIndexPath *path = [yourTableView indexPathForCell:cell]; 
    [yourTableView scrollToRowAtIndexPath:path 
         atScrollPosition:UITableViewScrollPositionTop 
           animated:YES]; 
} 
1

Настройте механизм делегирования из вашей ячейки - при создании ячейки назначьте ее NSIndexPath и передайте ее обратно из ячейки при нажатии кнопки.

Так что в вашем UITableViewCell подкласса вы будете иметь:

- (IBAction)buttonPressed:(id)sender 
{ 
    [self.delegate buttonPressedOnCellAtIndexPath:cell.indexPath] 
} 

Назад в контроллере, что это делегат, ответить на этот метод с:

- (void)buttonPressedOnCellAtIndexPath:(NSIndexPath)indexPath 
{ 
    [self.tableView scrollToRowAtIndexPath:indexPath]; 
} 
+0

механизм делегирования? Есть ли более простой способ? Мне на самом деле не нужно ничего передавать методу. Я просто хочу перейти к определенному разделу. – DanielR

+0

Не могли бы вы рассказать мне, что помещать в мои файлы .h, чтобы работала делегация? – DanielR

2

Вы можете прокручивать до определенной секции с используя эту функцию:

- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated 

пример использования:

[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:5 inSection:indexPath.section] 
      atScrollPosition:UITableViewScrollPositionMiddle animated:NO]; 

и для связи действия кнопки с Tableview вы можете использовать протокол в вас пользовательские клетках