1

私は xcode と Objective-C プログラミングが初めてで、助けが必要です。

1 つのビューでデータの配列と 2 つの UITableViews を使用する ios 用の基本的なプログラムを作成しようとしています。最初のテーブルで行われた選択に基づく配列によって、2 番目の UITableView を設定したいと考えています。2 番目のテーブルの配列の配列があります。しかし、最初のテーブルでインデックス 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

良い質問です。1 つのビュー コントローラーで 1 セットのデリゲート メソッドを使用して、両方のテーブルを制御できます。

最初に、両方のテーブルに対して 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

didSelectRowAtIndexPathfromを使用して、2 番目のテーブルビューに入力するターゲット配列を見つけますUITableViewDelegate。その後、2 番目のテーブルビューをリロードします。それはあなたの問題を解決するはずです。

于 2012-10-31T05:33:05.927 に答える
0

のメソッドdidSelectRowAtIndexPathで、対象の配列を渡すことによってUITableView、テーブル データをリロードします。[tbl reloadData]

于 2012-10-31T05:37:59.020 に答える
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 に答える