我想完成这样的事情:
看到只有一个数据,但背景颜色一直持续到结束。
我知道我可以在tableView:willDisplayCell:forRowAtIndexPath:
的tableview委托中进行。但是它不会进入空单元格,因此我的空单元格总是白色。
答案 0 :(得分:4)
我使用以下代码显示单元格替代颜色,即使单元格未初始化。我已在scrollViewDidScroll上完成此工作,如下所示: -
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
UIView *view=[[UIView alloc] initWithFrame:tblView.frame];
view.backgroundColor=[UIColor greenColor];
UIView *cellView;
int y=0;
int i=0;
for (UIView *view in tblView.subviews) {
if ([NSStringFromClass([view class]) isEqualToString:@"_UITableViewSeparatorView"]) {
cellView=[[UIView alloc] initWithFrame:CGRectMake(0, y, 320, 44)];
if (i%2==0) {
cellView.backgroundColor=[UIColor redColor];
}else{
cellView.backgroundColor=[UIColor greenColor];
}
[view addSubview:cellView];
i++;
}
}
tblView.backgroundView=view;
}
在滚动表视图中得到了正确的结果。但问题是,当用户每次至少滚动一次tableView时,它会起作用。 如果你将获得成功,就可以在tableView上完成重新加载。然后就可以了。
这是我在滚动tableView上的输出。
我也写这个方法手动调用didScrollMethod,但似乎不能很好地工作。
[tblView.delegate scrollViewDidScroll:(UIScrollView*)tblView.superclass];
但是调用下面代码的方法绝对可以正常工作。
- (void)viewDidLoad
{
tblView=[[MyFirstView alloc] init];
tblView.delegate=self;
[tblView setFrame:self.view.frame];
[self.view addSubview:tblView];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
-(void)viewDidAppear:(BOOL)animated{
[tblView.delegate scrollViewDidScroll:(UIScrollView*)tblView.superclass];
}
在viewDidLoad中加载tableView后表示viewDidAppear中的didScroll工作正常。
如果在滚动时第一行波动,请插入下面的代码。
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *view=[[UIView alloc] init];
return view;
}
答案 1 :(得分:2)
您必须将backgroundColor
设置为contentView
的{{1}}。
示例如下:
UITableViewCell
要在tableView的单元格中使用其他颜色,可以执行以下操作;
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"identifier"];
if (cell==nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"identifier"]autorelease];
cell.contentView.backgroundColor= [UIColor greenColor];
}
return cell;
}
答案 2 :(得分:0)
具有普通样式的表不会显示最后一行下面的行,因此无法使用表视图单元格生成所需的效果。关于您唯一的选择是使用交替模式创建视图,并使视图成为表视图的页脚视图。
当视图中实际行数变为奇数和偶数时,此视图需要处理更新。而且你需要让它足够高,所以如果用户将桌子向上滚动一堆,页脚仍然会到达屏幕的底部。
答案 3 :(得分:0)
除了您的单元格之外,您还可以使用“月度会议”设置一些占位符单元格,例如:
tableView:numberOfRowsInSection:
tableView:cellForRowAtIndexPath:
- 检查单元格的索引路径,如果其行= 0,则这是您的动作单元格,否则,更新单元格背景,在tableView:willDisplayCell:forRowAtIndexPath:
中执行相同操作。确保删除占位符单元格的selectionStyle。或者,您可以再次使用2个单元格 - 第一个 - 您的“月度会议”单元格,第二个单元格 - 一个高度足以覆盖屏幕从第一个单元格到底部的单元格,带有条纹单元格。
答案 4 :(得分:0)
这很简单。只需要在数据源数组中包含与要查看的行一样多的项目,并且只有第一个项目是空字符串。在willDisplayCell中:forRowAtIndexPath:将背景颜色应用于所有奇数编号的单元格。
- (void)viewDidLoad {
[super viewDidLoad];
self.theData = @[@"Monthly Meeting",@"",@"",@"",@"",@"",@"",@"",@"",@""];
[self.tableView reloadData];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.theData.count;
}
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row % 2 == 1) {
cell.backgroundColor = [UIColor colorWithRed:232/255.0 green:238/255.0 blue:222/255.0 alpha:1];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
cell.textLabel.text = self.theData[indexPath.row];
return cell;
}
答案 5 :(得分:0)
借助简单的数学方法将backgroundColor设置为UITableViewCell的contentView,例如:
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"identifier"];
if (cell==nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"identifier"]autorelease];
if (i%2==0) {
cell.contentView.backgroundColor= [UIColor greenColor];
}else{
cell.contentView.backgroundColor= [UIColor redColor];
}
}
return cell;
}
答案 6 :(得分:-1)