1

我是 xcode 和 Objective-C 编程的新手,需要一些帮助。

我希望为 ios 创建一个基本程序,该程序在一个视图中使用数据数组和 2 个 UITableView。我希望第二个 UITableView 由一个数组填充,该数组基于第一个表中所做的选择。我有第二个表的数组数组。但是当在第一个表中选择索引 0 处的数据时,无法理解如何将数组放在索引 0 处。

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [technologyData count];


}



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


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

if (tableView == technologyTable)
{

[[cell textLabel] setText:[technologyData objectAtIndex:indexPath.row]];
} 

if (tableView == experienceTable)
{
    cell.textLabel.text = [[experience objectAtIndex:indexPath.row]objectAtIndex:indexPath.row];
    [experienceTable reloadData];
}
return cell ;

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (tableView == technologyTable)
{
    experienceTable = [[experience objectAtIndex:indexPath.row] objectAtIndex:indexPath.row];

    selectTechnology.text = [technologyData objectAtIndex:indexPath.row];
    self.technologyList.hidden = YES;

}
if(tableView == experienceTable)
{
    self.experienceList.hidden = YES;
    selectExperience.text = [[experience objectAtIndex:indexPath.row] objectAtIndex:indexPath.row];
}


}
4

5 回答 5

2

好问题,您可以在一个视图控制器中使用一组委托方法来控制两个表。

您首先为这两个表创建一个 UITableView 类型的属性或 IVAR,并将它们连接到 IB 中它们受尊重的表。

然后在任何委托方法中(检查以查看哪个表正在调用该特定方法(例如):

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

 if (tableView == table1) {

   self.arrayIndex = indexPath.row;
   [table2 reloadData];

 } else if (tableView == table2) {

  //Secondary task

 } else {/* If necessary */}

}

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

     if (tableView == table1) {
     //Configure the top array as you need

     } else if (tableView == table2) {

      if(self.arrayIndex) {
        [arrayOfArrays objectAtIndex:self.arrayIndex [subArray objectAtIndex:indexPath.row]];
       } else {
        //figure something out
       }

     } else {/* If necessary */}

    }

}

如果您需要有关代码的帮助,请发布一些。

于 2012-10-31T05:41:40.000 回答
0

didSelectRowAtIndexPath:方法中

- (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
   if (tv == table1) {
      arrForSecondTable = [arrayOfArrays objectAtIndex:indexPath.row];
      [table2 reloadData];
    }
    else if (tv == table2) {
         // Do Something
     }
     else { // Do Something}
}
于 2012-10-31T05:57:06.207 回答
0

didSelectRowAtIndexPath的方法上UITableView,您可以[tbl reloadData]通过传递目标数组来重新加载表数据。

于 2012-10-31T05:37:59.020 回答
0

didSelectRowAtIndexPath使用from找到您希望第二个 tableview 填充的目标数组UITableViewDelegate。之后重新加载第二个表格视图。那应该可以解决您的问题。

于 2012-10-31T05:33:05.927 回答
0

正如我在您的代码中观察到的,问题出在此方法上:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [technologyData count];
}

您应该像这样检查此方法中的条件:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
  if(tableView == table1)
      return [technologyData count];
  else
      return [experience count];
}

编辑:

在您的 didSelectRowAtIndexPath 中:

只需在该行放置一个断点

experienceTable = [[experience objectAtIndex:indexPath.row] objectAtIndex:indexPath.row];
and
selectExperience.text = [[experience objectAtIndex:indexPath.row] objectAtIndex:indexPath.row];

并调试它。我很确定,你找到了崩溃的原因。

希望能帮助到你。

于 2012-10-31T09:20:38.873 回答