【问题标题】:Subclassed UITableView子类化 UITableView
【发布时间】:2011-09-16 11:55:03
【问题描述】:

我想要一个绘制自定义 Section 标题的 UITableView 的子类。我尝试如下:

#import <UIKit/UIKit.h>
@interface MyTableView : UITableView
@end
@implementation MyTableView
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
  //my drawing code goes here
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
  //returns the height
}
@end

但是,当我使用此类时,它会绘制正常的标题。我做错了什么?

当我将这些函数直接设置到控制器中(没有子类化)时,它可以正常工作。

更新: 我已经有很多使用 UITableView 的类,我想对它进行子类化,因为只更改编写所需类的类可能会更快。怎么能只通过更改班级来更改标题,可以吗?

【问题讨论】:

    标签: iphone objective-c ios uitableview subclassing


    【解决方案1】:

    发生这种情况是因为您继承了 UITableView 类,而这些方法不是来自 UITableView,而是来自 UITableViewDelegate

    它适用于您的控制器,因为您要么已将 UITableViewdelegate 属性设置为指向您的控制器,要么您正在使用 UITableViewController,它自动设置了 tableview 委托。 (实际上,在您的情况下,使用 UITableViewController 更糟糕,因为它已经实现了 UITableView 而不是您的自定义类)。

    编辑:不幸的是,由于UITableView 类中使用了delegation pattern 来更改其部分标题视图,因此实现这种操作并不简单

    一种方法是在你的类中提供这些“帮助”方法,然后在你的每个控制器上实现委托,以便在委托方法被触发时正确调用这些方法。

    如果这种方法是可以接受的,你甚至应该考虑使用这些方法的类别,而不是继承 UITableView,这会使代码更简洁。

    显然,您可以将UITableView 委托设置为您的自定义类,然后为您仍希望向控制器触发的调用创建另一个委托,例如cellForRowAtIndexPath,然后尽快调用这个新的委托方法当 tableview 触发方法时,但这是迄今为止最糟糕的解决方案

    【讨论】:

      【解决方案2】:

      我不明白你为什么要实现 TableView 而不是 MyTableView

      @implementation MyTableView
      

      更新:

      检查您是否正确设置了该表的dataSourcedelegate 属性。

      更新2:

      你应该从UITableViewController继承子类:

      @interface MyTableView : UITableViewController
      @end
      

      【讨论】:

      • 还是不行?检查属性dataSourcedelegate
      • dataSource 和 delegate 由类的实例设置。我必须检查什么?
      • @Felipe Sabino 也这么说。
      【解决方案3】:

      您可以继承 UITableViewController,处理 viewForHeaderInSection 和 heightForHeaderInSection,然后使用 MyTableViewController 作为您希望拥有自定义标题的每个表视图的基类。但是,viewForHeaderInSection 将需要具有创建 UILabel 所需的信息或您将用于显示标题的任何信息,因此您将需要在子类中提供一些一致的代码来提供该信息 - 就像一个 NSArray 填充标题所需的字符串,或者可以从 viewForHeaderInSection 调用的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多