我有两个UITableView嵌入到UIViewController中。两者都是动态的并且检索不同的数据。问题是,在使用indexPath
时,两个表中都使用了 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
。
这里有解决方法吗?我正在引用我的实体:
//tableView2 has a cell named differently
static NSString *CellIdentifier = @"Cell";
static NSString *CellIdentifier2 = @"Cell2";
//reference the cells to the right tables
UITableViewCell *cell = [self.tableView1 dequeueReusableCellWithIdentifier: CellIdentifier forIndexPath:indexPath];
UITableViewCell *cell2 = [self.tableView2 dequeueReusableCellWithIdentifier: CellIdentifier2 forIndexPath:indexPath];
//create access to details the cell will display from the core date
entity1 * e1 = [self.fetchedResultsController objectAtIndexPath:indexPath];
//this is the issue
//entity2 * e2 = [self.fetchedResultsController2 objectAtIndexPath:indexPath];
提到的问题是indexPath。如果我尝试运行应用程序,两个实体等同于它们各自的fetchedResults,则由于indexPath被重用而导致错误。如果我创建另一个indexPath,则会导致此错误(可以理解):
'与UITableView一起使用的索引路径无效。传递给表视图的索引路径必须包含指定节和行的两个索引。如果可能,请在UITableView.h中使用NSIndexPath上的类别。'
我的问题是,如何在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法中重用或创建对NSIndexPath的单独引用,还是有解决方法?
我已经尝试在方法中使用if / if else语句,但这会在两个表中显示相同数量的单元格;如果table1有10行,则无论内容如何,table2中都会有10行。
以下代码可能不正确,我没有足够的经验来实现两个表视图,但这不是主要问题:
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
if ([self fetchedResultsController]){
return [[self.fetchedResultsController sections] count];
}
if ([self fetchedResultsController2]) {
return [[self.fetchedResultsController2 sections] count];
}
else{
return 0;
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if ([self fetchedResultsController]){
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections]objectAtIndex:section];
return [sectionInfo numberOfObjects];
}
if ([self fetchedResultsController2]){
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController2 sections]objectAtIndex:section];
return [sectionInfo numberOfObjects];
}
else{
return 0;
}
}
答案 0 :(得分:2)
首先,您不必创建两个部分。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
然后你必须根据你的tableView
设置你的行- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (tableView == self.tableView1){
//Return the count you want inside self.tableView1
}
else if (tableView == self.tableView2){
//Return the count you want inside self.tableView2
}
else{
return 0;
}
}
最后在你的cellForRowAtIndexPath
里面根据你的TableView设置你的表值。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (tableView == self.tableView1){
static NSString *CellIdentifier = @"Cell";
//reference the cells to the right tables
UITableViewCell *cell = [self.tableView1 dequeueReusableCellWithIdentifier: CellIdentifier forIndexPath:indexPath];
}
else if (tableView == self.tableView2){
static NSString *CellIdentifier2 = @"Cell2";
UITableViewCell *cell2 = [self.tableView2 dequeueReusableCellWithIdentifier: CellIdentifier2 forIndexPath:indexPath];
}
else{
return 0;
}
}
答案 1 :(得分:0)
您需要为tableviews设置标记。并在cellforRowAt IndexPath
if(tabaleView.tag==100)
{
UITableViewCell *cell = [self.tableView1 dequeueReusableCellWithIdentifier: CellIdentifier forIndexPath:indexPath];
}
else
{
UITableViewCell *cell2 = [self.tableView2 dequeueReusableCellWithIdentifier: CellIdentifier2 forIndexPath:indexPath];
}