2012-01-24 2 views
0

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

ответ

1

Вот моя идея.

  1. Добавить UITableView и UIImageView в качестве подвидов из нижележащего UIView. UIImageView экземпляр представляет собой представление «строка/полоса» (как вы его называете)
  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

Не думайте, что это должно работать так, как я хочу. Будет ли он исчезать, lrepeaving только одна маленькая строка. И почему вы думаете, что он не прокрутит вниз? –

+0

Если вы укажете 'NO' последнему параметру' [UITableView scrollToRowAtIndexPath: atScrollPosition: анимированный:] ', тогда при появлении анимации« прокрутки »он не будет. Он отобразит таблицу только со второй строки, как если бы вторая строка была верхней строкой. Но я пропустил строку на верхней части. Я отредактирую свой ответ соответственно. – barley

+0

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

0

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

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