我试图在同一视图上有2个表视图。它们都在同一个UIViewController
内,实现了UITableViewDelegate
和Datasource
。其中一个tableviews是静态的,另一个是动态的。动态表视图使用其数据源中的方法正常加载,但静态表显示为空白。通常我会从控制器中删除数据源方法,因此静态TableView不会覆盖故事板上已经完成的操作,但现在我不能,因为动态TableView正在使用这些方法。
如何在同一控制器下同时使用两者?
答案 0 :(得分:1)
正如Putz所说,您可以设置视图控制器来管理2个表视图,方法是设置数据源并委托方法来检查传入的表视图。
但是,我不认为除了UITableViewController之外,你可以使用静态表视图,而表视图控制器只知道如何管理单个表视图。
诀窍是向视图控制器添加2个容器视图,其中包含2个表视图,并在每个容器视图中嵌入不同的UITableViewController。然后每个表视图由它自己的表视图控制器管理。我在github上有一个项目就是这样做的:https://github.com/DuncanMC/test
我已经设置了父视图控制器和2个表视图控制器用于通信的协议,但如果您的需求更简单,则不必这样做。
答案 1 :(得分:1)
这是最简单的选项,让您为代理/数据源保留一个VC:
将tableviews委托和数据源设置为UIViewController
。
从其中一个静态单元格按Ctrl键拖动到.h文件,然后创建一个IBOutlet集合(此处称为staticCellsCollection
)。将每个静态单元格添加到此集合中,小心顺序,这很重要。
以这种方式实施cellForRowAtIndexPath:
:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (tableView == _dynamicTableView) {
// Do your dynamic thing
}
else if (tableView == _staticTableView) {
// Return the static cells one by one
// Here the static TV has only one section, and all cells are in staticCellsCollection
return staticCellsCollection[indexPath.row];
}
}
您还需要调整numberOfRowsInSection
和numberOfSectionInTableView
,但这非常基本(检查哪个表正在询问,并返回适当的值,例如staticCellsCollection.count
表示行的行数静态电视)。
您可能需要对此进行调整,例如,如果您想在静态TableView中使用多个部分,则应为每个部分创建一个IBOutletCollection,并相应地处理行/部分的数量,并返回正确的单元格。无论如何,一旦你明白了,这就非常简单了。
答案 2 :(得分:0)
您可以让两个tableView使用相同的委托功能。这不是很漂亮,但你可以:
- (UITableViewCell *)tableView:(UITableView *)inTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(inTableView == tableView1)
{
...
}
else if
...
}
将这种类型的逻辑放入每个tableView委托函数中。