【问题标题】:delete UITableViewCell programmatically以编程方式删除 UITableViewCell
【发布时间】:2011-11-14 22:42:22
【问题描述】:

我想知道是否可以在 UITableView 中创建所有单元格后删除空单元格(空 = 没有 textLabel 的单元格)。

【问题讨论】:

    标签: objective-c ios4 xcode4


    【解决方案1】:

    为什么有空单元格?您是否使用一致的技术来控制表格中的单元格数量和这些单元格的内容?

    如果您使用的是 UITableViewController,那么您的控制器会自动声明为 tableview 的数据源。如果您使用的是 UIViewController,那么您将声明它符合 UITableViewDataSource 协议(并在 Interface Builder 中将其连接起来)。

    无论哪种方式,作为tableview的数据源,你的控制器都需要实现两种方法: – 表视图:cellForRowAtIndexPath: – tableView:numberOfRowsInSection:

    大概您在 -tableview:cellForRowAtIndexPath: 内使用数组或其他方式为 tableview 提供数据。在此方法中,单元格的标签将从数组中的条目中设置。在 tableView:numberOfRowsInSection: 中,您将执行类似 [myArray count] 的操作来返回单元格的数量。 tableview:cellForRowAtIndexPath 将按照您告诉它的次数被调用(由您在 tableview:numberOfRowsInSection 中提供的内容决定:)。如果数据源数组发生变化,并且您想在 tableview 中反映变化,那么您可以调用

    [self.tableview reloadData];  //if inside a UITableViewController
    
    [self.myTableViewOutlet reloadData];  //if inside a UIViewController
    

    请注意,reloadData 会重新加载整个 tableview,因此在某些情况下,这可能会耗费大量计算资源。在这种情况下,您可以使用以下方法专注于单个行,而不是调用 reloadData:deleteRowsAtIndexPaths:withRowAnimation:(参见UITableView Class Reference

    【讨论】:

    • 嘿,马特,我发现了问题,这是我用来异步加载图像的库,导致单元格为空。因为你已经回答了我在这里发布的一些问题,所以你对我在做什么是半熟悉的:),现在我在注销用户然后用另一个用户登录时遇到问题,问题是 UITableView即使用户的 ID 已更新并且我在 viewdidload() 中放置了一个 reloadData,也不会刷新以获取新用户的新数据,知道为什么吗?
    • 不看你的一些代码很难说。您可以在新问题中发布您的代码。用包含部分代码的结构提出一个结构良好的问题通常也是思考问题的好方法。同时,为了自己调试问题,你应该把 NSLog(@"some text here"); tableview:cellForRowAtIndexPath: 方法和 viewDidLoad 方法中的语句。这将帮助您查看方法何时被调用或是否未被调用。
    • 感谢您的回复,找到了解决方案...由于某种原因,当您使用 tabBar 控制器时它会缓存 UIView,所以我只是使用函数 viewWillAppear() 来更新 UIView。但再次感谢
    • 没错,为了提高速度,视图保留在内存中。因此 viewDidLoad 通常只被调用一次。如果内存警告情况迫使它卸载,它可能会在以后调用。太好了,viewWillAppear 是您的方案的好地方。
    【解决方案2】:

    作为应用代理,您负责提供单元格。返回每个单元格以及表格中的单元格数量是您的责任。因此,作为应用程序委托,您应该有一种方法(无论是通过 NSMutableArray 还是其他方式)来改变您返回到表视图的数据。

    【讨论】:

    • “应用程序委托”应该与视图控制器的表格视图无关。您是指 tableview 委托和数据源吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 2016-07-06
    • 2011-09-06
    相关资源
    最近更新 更多