Создание затухающего заголовка в табличном представлении, как в приложении заметок - PullRequest
0 голосов
/ 24 января 2012

Я хочу сделать небольшую вкладку игрока над видом таблицы, так что она всегда должна быть скрыта, только с небольшой видимой строкой в ​​1 пиксель, как в приложении заметок, и когда вы прокрутите вверх, она должна появиться, но остаться на сверху, не опускаясь, как и все ячейки в табличном представлении. Это не может быть заголовок, потому что он всегда виден и не может быть ячейкой, потому что он должен быть сверху. Итак, я хочу сделать все так же, как в приложении заметок, как я могу это сделать? Спасибо

Ответы [ 2 ]

1 голос
/ 24 января 2012

Вот моя идея.

  1. Добавьте UITableView и UIImageView как подпредставления базового UIView. UIImageView Экземпляр - это представление 'string / stripe' (как бы вы это ни называли)
  2. Создание двух прототипов клеток. Один для нормальной ячейки и один для ячейки заголовка.
  3. Для первой ячейки (indexPath.row == 0) всегда используйте прототип ячейки заголовка. Для других клеток используйте прототип нормальной клетки.
  4. В viewWillAppear всегда прокручивайте во второй ряд, используя [UITableView scrollToRowAtIndexPath:atScrollPosition:animated:]

Ниже приведен мой пример кода. (Это работало, как я ожидал, по крайней мере)

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480) style:UITableViewStylePlain];
    self.tableView.dataSource = self;
    self.tableView.delegate = self;
    [self.view addSubview:self.tableView];

    self.overlayView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"stripe.png"]]; // This is an image with stripe with transparent background
    self.overlayView.frame = CGRectMake(0, 0, 320, 10);
    [self.view addSubview:self.overlayView];
}


- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    NSIndexPath * indexPath = [NSIndexPath indexPathForRow:1 inSection:0];
    [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // It is important that the table has enough rows to scroll. Otherwise, [UITableView scrollToRowAtIndexPath...] will not take effect.
    return 20;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell * cell;
    if(indexPath.row == 0)
    {
        // This is an example of header cell
        cell = [tableView dequeueReusableCellWithIdentifier:@"topCell"];
        if(!cell)
        {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"topCell"];
            [cell.textLabel setText:@"This is the play tab"];            
        }        
    }
    else
    {
        // This is an example of normal cell
        cell = [tableView dequeueReusableCellWithIdentifier:@"normalCell"];
        if(!cell)
        {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:@"normalCell"];
        }        
        [cell.textLabel setText:[NSString stringWithFormat:@"Data at : %d", indexPath.row - 1]];
        [cell.detailTextLabel setText:@"A normal cell."];
    }    
    return cell;
}
0 голосов
/ 16 сентября 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...