根据第一个选择填充第二个表视图

时间:2012-10-31 05:28:01

标签: objective-c xcode uitableview

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

我希望为ios创建一个基本程序,它在一个视图中使用数据数组和2个UITableViews。我希望第二个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];
}


}

5 个答案:

答案 0 :(得分:2)

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

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

然后在任何委托方法中(检查哪个表调用该特定方法(ex):

- (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 */}

    }

}

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

答案 1 :(得分:0)

使用didSelectRowAtIndexPath中的UITableViewDelegate找到您希望第二个tableview填充的目标数组。之后重新加载第二个tableview。这应该可以解决你的问题。

答案 2 :(得分:0)

didSelectRowAtIndexPath的{​​{1}}方法中,您通过传递目标数组重新加载UITableView这样的表格数据。

答案 3 :(得分: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}
}

答案 4 :(得分: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];

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

希望它有所帮助。