0

我正在寻找如何创建多个单元格以转到不同的 ViewControllers。

对于我的 TableView,我使用的是UITableViewController.

当我在以下方法中选择 2 时,我只看到 2 个完全相同的单元格在做完全相同的事情。我对此不感兴趣。我什至不知道他们的 IndexPath 以更改他们的标题。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return 2;
}

当我尝试UITableViewCell在我的 TableView 中放置另一个时,它不会出现在 iOS 模拟器上,即使使用与UITableViewCell我可以看到的第一个相同的选项(相同的子类)也是如此。

谢谢你的帮助。

编辑:这是我创建 2 个单元格但不起作用的新代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{ 
static NSString *CellIdentifier = @"Cell2";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[customCell alloc] init];

}

static NSString *CellIdentifier1 = @"Cell1";
UITableViewCell *cell1 = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1];
if (cell1 == nil) {
    cell1 = [[customCell alloc] init];

}
// Configure the cell...

return cell;
}
4

3 回答 3

1

您在 中定义单元格tableView:cellForRowAtIndexPath:,因此您应该为该方法提供一个实现。

tableView:numberOfRowsInSection:只返回表格中的单元格数。

如果您需要更多帮助,请提供您的tableView:cellForRowAtIndexPath:. 这是典型实现的样子:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  static NSString *CellIdentifier = @"Cell";

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
  }

  ... customize your cell ...
}

编辑:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{ 
    static NSString *CellIdentifier = @"Cell2";
    static NSString *CellIdentifier1 = @"Cell1";

    if(indexPath.row == 0 ) {
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
      if (cell == nil) {
       cell = [[customCell alloc] init];

      }
    } else {

      UITableViewCell *cell1 = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1];
      if (cell1 == nil) {
        cell1 = [[customCell alloc] init];
      }
    }
    return cell;
}
于 2013-10-19T16:23:01.950 回答
0

选择单元格时调用此方法。您可以根据所选行决定您要做什么

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  {
       if (indexPath.row == 0)
           [self goToFirstViewController];
       else
       if(indexPath.row == 1)
        [self goToSecondViewController];
  }
于 2013-10-19T16:23:13.010 回答
0

使用以下内容:

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

此委托方法返回您想要在该特定部分中的行数。所以如果你想要超过 2 行,或者你希望行数是动态的,你可以在 AppDelegate 或者 viewController 类的 init 方法中创建一个 NSArray,然后在 numberOfRowsInSection 方法中返回数字,比如

return [delegate numberOfNames];

在上面的示例中,我在 AppDelegate 中创建了一个数组,还创建了一个方法来返回我在该数组中拥有的对象数,以便我可以为我的表创建行数。

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

此委托方法将显示您希望在每个单元格中显示的内容。因此,继在我的 AppDelegate 中创建的数组之后,我首先创建单元格,然后我将使用我在 AppDelegate 中创建的方法设置要在单元格上显示的文本,该方法将在接收 NSInteger 时返回 NSString 所以我可以遍历我的数组并相应地显示文本。

static NSString* MyIdentifier = @"Default";
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if( cell == nil )
    {
         cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];
         cell.textLabel.text = [delegate nameAtIndex:indexPath.row];
    }

nameAtIndex 是我在 AppDelegate 中创建的方法的名称,它将从我创建的 NSArray 中返回特定索引处的 NSString 对象(即行号),以存储我的表的所有项目。

当用户单击创建的表中的任何行时,将调用此委托方法

- (void) tableView: (UITableView*) tableView didSelectRowAtIndexPath: (NSIndexPath*) indexPath

在这里,我将检查显示的文本是否与存储表中项目的 AppDelegate 中的数组中的任何项目匹配,并创建必要的视图。

UIViewController* viewController = nil ;
 NSString* nameInArray = [delegate nameAtIndex:indexPath.row] ;

    if( [nameInArray isEqualToString:@"firstName"] )
    {
        viewController = [[FirstViewController alloc] init];
    }
    else if( [nameInArray isEqualToString:@"secondName"] )
    {
        viewController = [[SecondViewController alloc] init];
    }
    else if( [nameInArray isEqualToString:@"thirdName"] )
    {
        viewController = [[ThirdViewController alloc] init];
    }

因此,使用这 3 个委托方法,您将能够使用创建的 NSArray 创建表,并能够根据用户在表中选择的选项将用户重定向到 viewController。如果您还选择向表中添加更多行,则不必继续编辑委托方法,因为在设置表时会返回数组的计数。

数组和获取数组数据的方法也可以在 viewController 中创建,不一定在 AppDelegate 中创建,以防您想知道。

方法如下:

-(NSInteger) numberOfNames
{
    return [myArray count];
}

-(NSString*) nameAtIndex: (NSInteger) index
{
    return [myArray objectAtIndex:index] ;
}

希望这可以帮助!:)

于 2013-10-21T03:28:18.273 回答