4

所以我试图在一个视图中制作两个表格视图,但我遇到了一些麻烦。我已经阅读了一些关于如何做到这一点的其他回复,但它们并没有完全帮助我。

在我的 .h 文件中,我为两个视图创建了两个出口并调用myFirstViewText它们mySecondViewTex

所以在我的 m 文件中 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

我希望能够在每个不同的控制器中打印出单独的值,但我不太确定,因为您只返回 1 个单元格?

到目前为止,我已经完成了

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Rx";
static NSString *CellIdentifier2 = @"allergies";
UITableViewCell *cell = [tableView dequeueReusableHeaderFooterViewWithIdentifier:CellIdentifier];
UITableViewCell *cell2 = [tableView dequeueReusableHeaderFooterViewWithIdentifier:CellIdentifier2];
if(!cell){
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
if (!cell2) {
    cell2 = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier2];
}
if (tableView == self.myFirstTextView ) {
       cell.textLabel.text = @"HI JAZZY";//[RxDict objectAtIndex:indexPath.row];
}
if (tableView == self.mySecondTextView) {
      cell.textLabel.text = @"BYE JAZZY";//[RxDict objectAtIndex:indexPath.row];
}
tableView = self.mySecondTextView;
cell2.textLabel.text = @"I love Jazzy :D";
return cell2;

这会在我的第一个 TableView 中打印“I love Jazzy”,而在第二个 TableView 中没有打印任何内容。为什么会发生这种情况,我该如何解决?感谢:D

4

4 回答 4

7

所有将您的类的实例设置为数据源的 tableView 都会调用此方法。

这意味着您需要检查哪个tableView 要求某某某某单元格编号。

所以,你的方法基本上应该是这样的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView == rxTableView) {
        //prepare and return the appropriate cell for *this* tableView
    }
    else if (tableView == allergiesTableView) {
        //prepare and return the appropriate cell for *this* tableView
    }
    return nil; //because you don't expect any other tableView to call this method
}
于 2012-11-18T14:21:05.897 回答
4

我的建议是在你的两个表视图上设置一个标签,然后在你的表视图数据源方法中检查你的表视图所在的标签。例如,你可以在代码中的某些地方执行以下操作:

myFirstTableView.tag = 1;
mySecondTableView.tag = 2;

稍后当你在

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   if (tableView.tag == 1) 
   cell.textLabel.text = @"HI JAZZY";//[RxDict objectAtIndex:indexPath.row];

   if (tableView.tag == 2) 
   cell.textLabel.text = @"BYE JAZZY";
 }

此外,如果您有 2 个不同大小的表格视图,您可以这样实现:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  {
    if (tableView.tag == 1)
         return 1;
    else if (tableView.tag == 2)
         return 2;
  }
于 2012-11-19T04:52:34.557 回答
1

我不经常看到实现的一种方法实际上是使用 NSObject 子类作为每个表的委托和数据源,而不是视图控制器。它消除了对“if (tableView == someTable) ...”代码的需求,并且可能使您的视图控制器和 UITableView 代码都可维护和可读。

您将为每个表创建一个 NSObject 子类。这些子类将包含您的 UITableView 数据源和委托方法的所需实现。然后,您将在视图控制器中实例化其中的一个,并将每个连接到相应的表中。

于 2012-11-19T04:41:43.803 回答
1

问题1:

tableView = self.mySecondTextView;     
cell2.textLabel.text = @"I love Jazzy :D";
return cell2;

你在这里所做的总是返回cell2,设置它的文本“我喜欢爵士乐:D”所以它总是会填充第一个表视图,因为你不会tableView=mySecondTextView在进入方法之前设置。代表总是以firstTableView.

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

问题2:

if (tableView == self.myFirstTextView ) {
    cell.textLabel.text = @"HI JAZZY";
    //[RxDict objectAtIndex:indexPath.row];

    //for printing in first table view return cell here like

    return cell;
}
if (tableView == self.mySecondTextView) {
    cell.textLabel.text = @"BYE JAZZY";
    //[RxDict objectAtIndex:indexPath.row];

    //for printing in second tableview return cell two here

    return cell2;
}

在进入此功能之前,请确保您要定位的表已设置。您可以在numberofsection方法、视图didload方法或您想要显示或目标表视图的其他地方设置它(例如单击某个按钮)。但是你不能在这里设置。

于 2015-06-05T11:07:54.130 回答