`
wenxin2009
  • 浏览: 320487 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

有关UITableView复用问题

    博客分类:
  • ios
 
阅读更多

近来用Tableview做了一个九宫格。过程中碰到了两个cell复用问题。

问题一:

在cell中为button添加addTarget点击事件时,出现后面的cell会重叠它前面cell的事件。代码如下:

static NSString *CellWithIdentifier = @"DiscoverHomeTableViewCell";
        DiscoverHomeTableViewCell *cell1 = [tableView dequeueReusableCellWithIdentifier:CellWithIdentifier forIndexPath:indexPath];
        cell1.delegate = self;
        [cell1.btnMore addTarget:self action:@selector(btnMoreDisplay) forControlEvents:UIControlEventTouchUpInside];
        cell1.labTitle.text = @"热门";
        cell1.listExhibit = _homeVo.listExhibit;
        cell1.dType = D_TYPE_1;
        cell1.navigationController = self.navigationController;
        [cell1.tableView reloadData];
        return cell1;

经过调试确实是复用了之前cell的事件。在此用协议代理可解决这一问题,用协议来进行处理点击事件。

#pragma mark DiscoverHomeTableViewCellDelegate
- (void)ActionWithTap:(NSString *)type withData:(id)data{
    if ([type isEqualToString:D_TYPE_1]) {
        [self btnMoreDisplay];
    }
}

 

问题二:

在UITableViewCell中,进行手写代码方式添加控件,这时在cell复用时,会出现重叠控件及控件中的内容。因为每一个cell都是重新添加的,前面的cell会覆盖在后面的cell上。于是强制对cell中添加的控件进行了清空,cell复用不变,只是新的cell加载前,都会对上一个cell的内容进行清空。代码如下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifer = @"DiscoverHomeInnerTableViewCell";
    DiscoverHomeInnerTableViewCell *cell  = [tableView dequeueReusableCellWithIdentifier:CellIdentifer forIndexPath:indexPath];
    //TODO 解决cell复用重叠问题
    for (UIView *subview in [cell.contentView subviews]) {
        [subview removeFromSuperview];
    }
   UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
//button相关设置
[cell.contentView addSubview:button];
UILabel *lab = [[UILabel alloc] init];
//lab相关设置
[cell.contentView addSubview:lab];
}

 

总结:

     cell在复用时,如果手动添加控件,会有内容重叠现象出现。所在在运用时需要注意。

分享到:
评论

相关推荐

    UITableView的SectionHeader的复用

    为了解决这个问题,UITableView提供了SectionHeader的复用机制,就像cell的复用一样,可以有效地减少内存开销并提高滚动流畅性。 首先,我们来理解一下UITableView的复用原理。UITableView通过一个叫做"reuse queue...

    UITableview处理键盘遮挡

    至于“没有实现控件复用导致的出现重复文本,以及部分bug”,这是关于`UITableView`的数据源和代理方法使用不当的问题。在`UITableView`中,为了提高性能和节省内存,通常会使用`cellForRowAt`方法复用`...

    UITableView的使用方法及cell复用机制

    在本篇文章中,我们将深入探讨UITableView的使用方法以及其核心的cell复用机制。 首先,创建UITableView需要在界面设计时通过Storyboard或者代码动态创建。在Storyboard中,你可以直接拖拽UITableView到...

    swift-UITableViewCache-UITableView缓存

    这种复用机制是UITableView高效运行的关键,减少了内存分配和对象初始化的开销。 为了进一步优化,我们可以自定义缓存策略。在"UITableView Cache"项目中,开发者可能实现了一个自定义的缓存类,它可能包括以下几点...

    调试UITableView问题的代码

    3. **Cell重用问题**:`UITableView`为了性能会复用Cell,如果你在`cellForRowAt`中没有正确设置Cell的内容,可能会导致旧的数据被显示。确保在每次Cell被复用时,都根据当前的数据源更新Cell的UI。 4. **...

    uitableView问题

    在处理UITableView时,我们经常遇到关于UITableViewCell的各种问题,特别是与自定义cell中的图片显示相关的细节。在这个场景中,"uitableView问题"主要涉及到`UITableViewCell`的`imageView`以及它的`frame`设置。 ...

    UITableView Demo代码

    总的来说,“UITableView Demo”项目涵盖了UITableView的基本使用,包括数据源的配置、单元格的创建与复用、用户交互的处理,以及可能的自定义单元格设计。通过学习这个Demo,开发者能够更好地理解和运用UITableView...

    UITableView 快捷菜单的使用Demo

    7. **性能优化**:由于UITableView的Cell复用机制,注意在`prepareForReuse()`方法中清理Cell的状态,防止上一次的数据残留。 8. **测试与调试**:对各种场景进行测试,包括快速滑动列表、粘贴不同类型的文本和图片...

    UITableView的带有图片

    - UITableView使用Cell复用来提高性能,因此需要在`tableView(_:willDisplay:forRowAt:)`或`tableView(_:prepareForReuse:)`方法中清除之前加载的图片,以避免图片显示错误。 6. **延迟加载与懒加载**: - 当...

    仿IOS式ListVIew UITableView

    - **Cell复用**:仿制UITableView的一个关键在于实现Cell(在Android中是ViewHolder)的复用机制,以提高性能。这可以通过设置Adapter的`convertView`方法来实现。 - **自定义Adapter**:创建一个继承自...

    《使用UITableView实现树视图》一文源代码

    当用户滚动表格时,UITableView会根据需要复用这些单元格,以提高性能。因此,设计树视图的关键在于如何正确地管理和复用这些单元格,以及如何处理层级关系。 1. 数据模型设计: - 为树形数据定义一个自定义的模型...

    UITableView加载图片 官方范例

    6. **UITableViewCell的重用**:UITableView的一大特性是单元格重用,通过`dequeueReusableCell(withIdentifier:)`方法,我们可以复用已创建的单元格,减少新创建对象的开销。在加载图片时,要确保正确处理旧图片,...

    IOS UITableView及索引条源码

    2. 复用机制:为了提高性能,UITableView采用Cell复用机制。开发者需要在`- tableView:cellForRowAtIndexPath:`方法中配置cell的内容,而不是每次都创建新的cell。 3. 行回调:UITableView还提供了诸如`tableView:...

    UItableView多cell实现

    为了解决这个问题,我们可以采用“工厂模式”来优化代码结构。工厂模式是一种设计模式,它提供了一种创建对象的最佳方式,特别是在我们不能预先知道需要创建哪种类型对象的情况下。在UITableView的上下文中,我们...

    Swift UITableView and protocol 学习使用

    10. **优化性能**:通过复用机制,UITableView可以减少内存开销。当单元格滚动出视图时,它们会被复用,而非每次都创建新的单元格。 通过学习和实践这些知识点,你可以熟练地在Swift中使用UITableView和协议构建...

    UITableView 实现滚动视差

    当用户滚动表格时,单元格会根据需要加载和复用,以优化性能。实现滚动视差,我们需要让背景视图(如UIImageView)随着表格滚动而移动,但速度比单元格慢,同时保持背景的完整性和连贯性。 要实现这个效果,我们...

    UITableView与UITableViewCell

    在`cellForRowAtIndexPath`方法中,通常会创建或复用UITableViewCell,设置其子视图的内容。在这个例子中,我们可能为每个单元格创建一个具有文字的UILabel,然后根据数据源数组填充内容。 此外,还可以通过自定义...

    IOS自定义UITableView框架(社区风格)

    在iOS应用开发中,UITableView是不可或缺的组件,用于展示列表数据。自定义UITableView框架能够根据项目需求打造出独特的用户界面和交互体验。本教程将聚焦于如何构建一个社区风格的UITableView框架,以提升应用的...

    UITableView的封装

    本篇文章将深入探讨如何对UITableView进行基础封装,以提高代码的可复用性和可维护性。 首先,我们需要理解UITableView的基本构成。一个UITableView由多个UITableViewCell组成,每个单元格显示一行数据。为了自定义...

    iOS中UITableView嵌套UITableView

    8. **代码组织与封装**:为了保持代码的清晰和可维护性,可以将嵌套表格的相关逻辑封装成一个单独的类或组件,这样可以方便地在项目其他地方复用。 总之,实现iOS中的UITableView嵌套UITableView需要对UITableView...

Global site tag (gtag.js) - Google Analytics