如何将 UITableViewController 创建为可重用模块?
Posted
技术标签:
【中文标题】如何将 UITableViewController 创建为可重用模块?【英文标题】:How to create UITableViewController as reusable module? 【发布时间】:2013-12-11 12:24:36 【问题描述】:我是 ios 开发新手。我创建了两个类UITableViewController
。一个是Tasks
的列表,第二个是Notes
的列表。
现在的问题是这两个UITableViewController
在许多屏幕上都需要(在某些屏幕上同时)。我不想在每个屏幕上为UITableView delegates and datasource
重写所有代码。我想通过某种继承机制或模块系统重新使用UITableViewController
。
因此,在我需要显示列表的每个UIViewController
上,我只需在 nib 文件中添加一个UITableView
,设置其自定义类,它应该开始显示数据。
是否可以使用某种继承、组件或模块系统?
感谢任何帮助。
【问题讨论】:
感谢您的回复,我已经创建了一个单独的 UITableViewController,并实现了所有必需的委托和数据源方法。现在我想在多个屏幕上使用这个 UITableViewController。任务和笔记是完全不同的东西。你可以忘记他们。问题是如何在多个屏幕上重用 UITableViewController。 【参考方案1】:创建 UITableViewController 的子类,添加所有必需的委托方法并在 .h 文件中添加:
@property(nonatomic, strong) NSArray *myData;
所有方法都基于该数组设置,例如:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return self.myData;
当您想使用它时,只需创建对象并传递您的数据:
MYTable *tableViewController = [[MYTable alloc] init];
tableViewController.myData = DATA YOU WANT TO DISPLAY;
它会起作用,但您必须将完全相同的数据结构传递给您的 NSArray 才能在 cellForRowAtIndexPath:
方法中正确处理它。
【讨论】:
感谢您的回复。我仍然很困惑。我创建了运行良好的 TaskViewController。现在我想在我的实际屏幕 DashboardViewController 中使用它。那么我应该如何在 DashboardViewController 中使用 TaskViewController?如果我做 TaskViewController *taskVC = [[TaskViewController alloc] init]; [taskVC.tableView reloadData];它不起作用。目前我已经在 TaskViewController 中对 dataArray 进行了硬编码。 不要对 dataArray 进行硬编码,使用我在帖子中放置的属性,创建后添加:taskVC.dataArray = 要显示的数组。 谢谢 Greg,数据对我来说没问题。它已在 TaskViewController 中设置,您可以假设我需要在所有屏幕中显示硬编码数据。因此我在TaskViewController 中创建了数据。因此无需在所有其他屏幕中一次又一次地设置。其实我正在考虑MVC模式。我想创建一个视图控制器。我可以在我想要的任何屏幕上使用。就像一个组件或插件。【参考方案2】:嘿,伙计,您需要维护两个数组并创建一个切换按钮 ex。 a/b
如果按下 a 则获取一个数组的计数,如果按下 b 则计数另一个字典的数组。并通过维护一个 BOOL 变量来做到这一点。
例如。 BOOL 校验值;
-(UIButton *)a:(id)button
checkvalue = TRUE;
[tableview reloadData];
-(UIButton *)b:(id)button
checkvalue = FALSE;
[tableview reloadData];
现在将条件放在tableview中计算行数,以及cellforrowatindexpath方法。 像, // 对于 numberOfRowsInTableview
if(checkvalue == TRUE)
return [arr1 count];
else
return [arr2 count];
同样对于 cellForRowAtIndexPath 谢谢,祝您有愉快的一天。
【讨论】:
以上是关于如何将 UITableViewController 创建为可重用模块?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 UITableViewController 创建为可重用模块?
如何将单元格插入 UITableViewController
如何将数据从 uitableviewcontroller 发送到 uitableviewcell
如何将数据放在 UITableViewController 的正确部分?
如何将 UITableView 或 UITableViewController 集成到 UIPageViewController 中?
如何将 segmentedControl 和 UISearchController 作为 UITableViewController 标头? (以编程方式)