【问题标题】:Why can't I change the custom class of my UITableView?为什么我不能更改我的 UITableView 的自定义类?
【发布时间】:2014-05-29 14:25:04
【问题描述】:

抱歉,如果这个问题有点基本,但我花了几天时间试图了解这个问题的根本原因,但没有任何成功。

我正在开发一个严重依赖 UITableView 对象的应用程序。我可以成功使用UITableViewController 对象并在表格中显示信息,但我需要能够在屏幕上显示多个表格,引用来自多个来源的数据,而UITableViewController 似乎太有限了。

我希望能够在情节提要中放置多个 UITableView 对象,然后创建管理表的自定义类文件。不幸的是,当我尝试这样做时,XCODE 不允许我选择这些自定义类来管理表。

虽然我在网上找到了一些潜在的解决方法,但我想了解为什么无法选择一个新类来管理表格视图。

[我想发布图片,但显然我不能,除非我有更好的声誉...]

【问题讨论】:

  • 显示自定义类的头文件,看来您没有提供正确的父类。
  • 你需要使用一个UIViewController,然后把UITableView放进去。
  • 你可以给图片点个赞
  • 头类代码是这样的:#import interface DHTableViewController : UITableViewController end

标签: ios objective-c xcode uitableview uistoryboard


【解决方案1】:

这完全取决于你做了什么。但是,你真的应该采取不同的方法:

如果可以,请使用包含多个部分(带有页眉/页脚)的单个表格视图。

如果您不能这样做,请为您想要的每个信息部分创建单独的表格视图控制器和表格视图。然后,您的“主”视图控制器应充当父视图,并将所有其他表视图控制器添加为子视图 (addChildViewController:),并将它们的视图添加为子视图。这种方法将使您的代码保持隔离和组织,而不是试图让一个控制器管理许多不同的视图。

【讨论】:

  • 这真是个好主意 - 我不需要显示大量数据,所以多个部分都可以工作!
【解决方案2】:
.h
{
UITableView *objlefttableview;
UITableView *objrighttableview;
}

.m
viewdidload
{

if(!objlefttableview)
        objlefttableview=[[UITableView alloc]initWithFrame:CGRectMake(0, 87, 227, 681) style:UITableViewStylePlain];
    if(!objrighttableview)
        objrighttableview=[[UITableView alloc]initWithFrame:CGRectMake(227, 87, 263, 681) style:UITableViewStylePlain];

  [objlefttableview registerNib:[UINib nibWithNibName:@"View" bundle:Nil] forCellReuseIdentifier:@"leftCell"];

 [objrighttableview registerNib:[UINib nibWithNibName:@"ViewR" bundle:Nil] forCellReuseIdentifier:@"rightCell"];

}
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

if (self->objlefttableview==tableView)
    {

}

else
{

}

}

所以我刚才所做的是我创建了两个 tableview 对象,然后我给他们两个不同的自定义单元格 如果您在这种方法中需要更多帮助,请询问

【讨论】:

  • 这太棒了 - 谢谢!代码在我的机器上没有正确运行,但我还没有机会真正研究它的细节。我最初的问题仍然是开放的,为什么如果我在创建单页应用程序模板时在原始 UIView 上创建两个表视图(向每个表添加一个原型单元格,然后创建一个类 [可以说它称为 XClass],它继承自 UITableViewController)为什么我不能用 XClass 控制这些表?为什么那个班级不能上桌?
  • 您是否使用该 XClass 附加了这些表的数据源和委托??
  • 这正是推动力:我没有指定该类也是 UITableViewDelegate 和数据源。非常感谢您的帮助!
【解决方案3】:

问题在于,由于 UITableViewController 对象默认是 UITableView 委托并且它是数据源,因此 UIView 不是即使它继承自 UITableViewController。我没有指定,似乎 1 个或多个表都不能运行,因为它们没有将管理它们的类设置为委托和数据源。

通过在 ViewController 的 .h 文件中指定它也是 UITableView 的委托和数据源,如下所示(委托和数据源命令应该用三角括号括起来,但由于某种原因它们不会显示在上面):

@interface DHViewController : UIViewController [UITableViewDataSource, UITableViewDelegate]

并在 .m 文件的 viewDidLoad 方法中指定它是两个 tableView 的数据源和委托,如下所示:

self.tableAnswers.delegate =self;
self.tableAnswers.dataSource = self;
self.tableQuestions.delegate   =self;
self.tableQuestions.dataSource = self;

并在 .m 文件中实现必要的方法:

  • (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

  • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

...两个表格可以独立管理并显示在同一屏幕上。

非常感谢大家的帮助!

仅供参考(我想我仍然会支持 @Wain 的想法,即拥有一个包含特定内容/行为的表格 - 看起来更整洁)。

【讨论】:

    【解决方案4】:

    1) 为您的故事板添加 UITableView。

    2) 设置委托和数据源。

    3) 为这些 tableView 的创建 Outlets(你的类中的属性)

    然后您可以使用 thouse 表视图。例如,在其上放置标签,并在您的程序中动态更改文本。

    干杯:)

    【讨论】:

      猜你喜欢
      • 2016-05-20
      • 2014-03-10
      • 2012-02-10
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多