在表格视图中制作一个淡化标题,就像在笔记应用程序中一样

时间:2012-01-24 13:33:47

标签: objective-c ios uitableview

我想在我的桌面视图上方制作一个小玩家标签,所以它应该始终隐藏,只有一个小的1px字符串可见,就像在笔记应用程序中,当你滚动到顶部时,它应该出现,但保持顶部,而不是下降,就像表视图中的所有单元格一样。 它不能是标题,因为它总是可见的,它不能是一个单元格,因为它必须在顶部。 所以我想在笔记应用程序中做所有事情,我该怎么做? 谢谢

2 个答案:

答案 0 :(得分:1)

这是我的想法。

  1. 添加UITableViewUIImageView作为基础UIView的子视图。 UIImageView实例是'string / stripe'的表示(无论你怎么称呼它)
  2. 创建两个单元格原型。一个用于普通单元,一个用于标题单元。
  3. 对于第一个单元格(indexPath.row == 0),始终使用标题单元格原型。对于其他细胞,请使用正常细胞原型。
  4. viewWillAppear中,始终使用[UITableView scrollToRowAtIndexPath:atScrollPosition:animated:]
  5. 滚动到第二行

    以下是我的示例代码段。 (它至少符合我的预期)

    - (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;
    }
    

答案 1 :(得分:0)

我相信只有一种方法可以达到这个效果。您应该使用scrollViewDidScroll:方法。你在桌子上放置一个子视图,并在每次桌面滚动时为它计算适当的坐标。描述所有可能的条件可能有点乏味,但没有什么棘手的。