相对于第一个选择的第二个表视图



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

我希望为iOS创建一个基本程序,该程序在一个视图中使用一系列数据和2个uitableviews。我希望第二个UitaiteView由基于第一表中的选择的数组填充。我有第二个表的数组。但是当在第一个表中选择索引0时的数据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];
}

}

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

您首先为两个表创建属性或类型的属性,然后将它们连接到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 */}
    }
}

如果您需要在代码方面提供一些帮助,请发布一些。

找到要使用UITableViewDelegate中的didSelectRowAtIndexPath填充第二个TableView的目标数组。在重新加载第二个桌面视图之后。那应该解决您的问题。

didSelectRowAtIndexPathUITableView方法上,您通过传递目标数组来重新加载表像[tbl reloadData]一样。

> 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}
}

正如我在您的代码中所观察到的那样,此方法的问题是:

-(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];

并调试它。我很确定,您会发现崩溃的原因。

希望它有帮助。

相关内容

最新更新