У меня есть табличное представление с несколькими пользовательскими ячейками. Внутри первой есть кнопка. Когда эта кнопка нажата, я хочу прокрутить до определенной секции в моем представлении таблицы. Как мне связать действие кнопки с табличным представлением?scrollToRowAtIndexPath при нажатии кнопки внутри UITableViewCell
1
A
ответ
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];
}
2
Вы можете прокручивать до определенной секции с используя эту функцию:
- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated
пример использования:
[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:5 inSection:indexPath.section]
atScrollPosition:UITableViewScrollPositionMiddle animated:NO];
и для связи действия кнопки с Tableview вы можете использовать протокол в вас пользовательские клетках
механизм делегирования? Есть ли более простой способ? Мне на самом деле не нужно ничего передавать методу. Я просто хочу перейти к определенному разделу. – DanielR
Не могли бы вы рассказать мне, что помещать в мои файлы .h, чтобы работала делегация? – DanielR