если мы нажмем на заголовок пользовательского раздела в UITableView, то переместим этот раздел вверх - PullRequest
7 голосов
/ 09 декабря 2011

У меня есть Custom Section Header в UITableView, в заголовке этого раздела помещено UIButton справа от него. Что я хочу, если, если я нажму на UIButton, то конкретный Section Header должен прокрутиться к началу , Вот и все

Любое предложение, кусок кода будет восхищаться.

Ответы [ 2 ]

17 голосов
/ 09 декабря 2011

Шаг 1: установить размер заголовка раздела. Пример следующим образом.

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 55;
}

Шаг 2: создать и вернуть настроенный заголовок раздела.

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    UIView *aView =[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 55)];
    UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];
    [btn setFrame:CGRectMake(0, 0, 320, 55)];
    [btn setTag:section+1];
    [aView addSubview:btn];
    [btn addTarget:self action:@selector(sectionTapped:) forControlEvents:UIControlEventTouchDown];
    return aView;
}

Шаг 3: вернуть количество секций. (например, 10 здесь)

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 10;
}

Шаг 4: количество строк в разделе. (например, 4 строки для каждого раздела)

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 4;
}

Шаг 5: создать и вернуть ячейку (UITableViewCell для каждой строки)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }
    cell.textLabel.text=[NSString stringWithFormat:@"%i_%i",indexPath.section,indexPath.row];

    return cell;
}

Шаг 6: добавить событие для обработки TouchDown в заголовке раздела.

- (void)sectionTapped:(UIButton*)btn {
    [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:btn.tag-1] atScrollPosition:UITableViewScrollPositionTop animated:YES];
}
2 голосов
/ 09 декабря 2011

Вы можете использовать scrollToRowAtIndexPath: atScrollPosition: animated: метод из UITableView. Установите тег кнопки в разделе и вызовите его действие:

[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:button.tag] 
atScrollPosition:UITableViewScrollPositionTop animated:YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...