0

我已经在我的应用程序上设置了一个分组表,并且推送到新视图工作正常。除了一件事。标题和堆栈布局都很奇怪。这是细分:

  1. 我的桌子上有两个部分。
  2. 当我点击第一部分的第一行时,它会将我带到正确的视图,但新视图的标题是表格第二部分中第一行的名称。
  3. 反过来,第一节标题中的第二行是第二节标题中的第二行。

如果我点击根视图表第二部分的第二行,导航按钮会转到表第一部分的第二行。

所以这是我的表格的图表:


表格部分 1
行 1
行 2
行 3

表第 2
行 A
行 B
行 C 行


因此,如果我点击第 3 行,推送视图的标题为 C 行。导航按钮告诉我返回第 3 行,然后最终到达根视图。

这是我推送视图的实现文件:

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

    //CSS
    if ([[arryClientSide objectAtIndex:indexPath.row] isEqual:@"CSS"])
    {
        CSSViewController *css = [[CSSViewController alloc] initWithNibName:@"CSSViewController" bundle:nil];
        [css setTitle:@"CSS"];
        [self.navigationController pushViewController:css animated:YES];
    }

    //HTML
    if ([[arryClientSide objectAtIndex:indexPath.row] isEqual:@"HTML"])
    {
        HTMLViewController *html = [[HTMLViewController alloc] initWithNibName:@"HTMLViewController" bundle:nil];
        [html setTitle:@"HTML"];
        [self.navigationController pushViewController:html animated:YES];
    }

    //JS
    if ([[arryClientSide objectAtIndex:indexPath.row] isEqual:@"JavaScript"])
    {
        JSViewController *js = [[JSViewController alloc] initWithNibName:@"JSViewController" bundle:nil];
        [js setTitle:@"JavaScript"];
        [self.navigationController pushViewController:js animated:YES];
    }

    //PHP
    if ([[arryServerSide objectAtIndex:indexPath.row] isEqual:@"PHP"])
    {
        PHPViewController *php = [[PHPViewController alloc] initWithNibName:@"PHPViewController" bundle:nil];
        [php setTitle:@"PHP"];
        [self.navigationController pushViewController:php animated:YES];
    }

    //SQL
    if ([[arryServerSide objectAtIndex:indexPath.row] isEqual:@"SQL"])
    {
        SQLViewController *sql = [[SQLViewController alloc] initWithNibName:@"SQLViewController" bundle:nil];
        [sql setTitle:@"SQL"];
        [self.navigationController pushViewController:sql animated:YES];
    }

& 提供表格数据的数组:

- (void)viewDidLoad {
    [super viewDidLoad];


    arryClientSide = [[NSArray alloc] initWithObjects:@"CSS",@"HTML",@"JavaScript",nil];
    arryServerSide = [[NSArray alloc] initWithObjects:@"Objective-C", @"PHP",@"SQL",nil];
    // arryResources = [[NSArray alloc] initWithObjects:@"HTML Colour Codes", @"Useful Resources", @"About",nil];
    self.title = @"Select a Language";
    [super viewDidLoad];

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

任何帮助将不胜感激。
杰克

4

2 回答 2

3

我认为您缺少一个 if 语句来确定用户点击了哪个部分。记住 NSIndexPath 有 row 和 section 属性。我通常会这样做:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if ( indexPath.section == 0 ) {
  // Do something with arryClientSide
}
if ( indexPath.section == 1 ) {
  // Do something with arryServerSide
}

我假设您使用的是分组表。

干杯,-丹

于 2010-05-06T19:05:26.067 回答
0

Dan 是对的,您需要使用 indexPath.section 变量。看起来您的代码现在是这样,您实际上是在推送 2 个视图控制器,因为您有一系列单独的 if 语句,在您单击“第 1 行”后会发生以下情况:

isEqual:@"CSS" 将返回 true,

推送 css 视图控制器,

然后下拉并继续检查 (if.​​. isEqual:@"HTML").. (if.​​. isEqual:@"JavaScript")

那么果然(if.. isEqual:@"PHP")也将返回 true 并推送 php 视图控制器。

我不知道您的整个应用程序,但我在这里注意到的一个观察结果(除了内存泄漏)是您有一个专用于每种语言的视图控制器/笔尖。如果视图控制器具有截然不同的行为/外观,那么我想这就是您必须做,但我建议尝试查看每个之间的相似之处,看看你是否不能制作单个“LanguageViewController”,传递它应该代表的语言并进行初始化/设置视图控制器的属性基于此。这可能不适用,但如果适用,它将为您节省大量工作!

于 2010-05-06T19:39:49.253 回答