0

Interface Builder を使用して、2 つのセグメントを持つセグメント化されたコントローラーを挿入した tableViewController があります。デフォルトでは、最初のセグメントが常に選択されているため、最初のセグメントに対応するテーブルビューを表示する際に問題はありません。ただし、2 番目のセグメントをクリックすると、別の tableView が表示されます。

ここに問題があります。2 番目のセグメントをクリックすると、newTableViewController クラスが呼び出されます。したがって、このビューは代わりにプッシュされます。セグメントをクリックしたときに、これら2つのテーブルビューをメインテーブルビューに配置する方法を提案してください。

セグメント間の切り替えにはスイッチケースを使用しました。

コードの関連部分は次のとおりです。最初のセグメントがデフォルトで選択されているため、このメソッドは FirstTableViewController にあります。

-(IBAction) segmentedControlChanged
{
     switch(segmentedControl.selectedSegmnentIndex)
     {
        case 0:
         //default first index selected. 
         [tableView setHidden:NO];
         break;
         case 1:
         NewViewController *controller=[[NewViewController alloc] initWithNibName:@"NewViewController" bundle:nil];
         self.navigationController pushViewController:controller animated:YES];
         [controller release];
         break;
         default:
         break;
     }
}
4

6 に答える 6

2

ケース 1の最初の行として、以下のコードを入力します 。

if(self.tblView.isHidden==NO)
    self.tblView.hidden=YES;

など、、、

case 1:
         if(self.tblView.isHidden==NO)
              self.tblView.hidden=YES;

         NewViewController *controller=[[NewViewController alloc] initWithNibName:@"NewViewController" bundle:nil];
         self.navigationController pushViewController:controller animated:YES];
         [controller release];
         break;
于 2012-10-08T09:24:15.480 に答える
1

同じクラスに 2 つのテーブルビューを追加するには、UITableView のタグを使用する必要があります。タグを設定し、選択したセグメントに従ってデータをアップロードします。

これ には同じ問題があると思います。

編集。 複数のオプションがあります

  1. テーブルの構造・見た目が同じであれば、2つの配列を入力として使用することができます。
  2. 条件付きの2つの異なるUITableViewを使用するか、テーブルビューにタグを使用できます
于 2012-10-08T09:18:52.117 に答える
1

1.View Controller を 1 つ作成します。MainViewController は UIViewController を継承します (UITableViewController ではありません)。

2. MainViewController で、mTableView1 と mTab​​leView2 という 2 つの tableView を作成し、両方の tableview にそれぞれ 100 と 101 というタグを割り当てます。

3.最初のセグメントが選択された場合、var = 100など、選択されたセグメントに基づいて値を格納する1つの変数を作成します。

4.テーブルビューのデータソースとデリゲート メソッドでは、この変数を使用して、選択されているセグメントを見つけ、それぞれのテーブルビューを表示します。

また、テーブルビューの構造と機能が同じであれば、単一のテーブルビューを使用して、選択したセグメントに応じてテーブルビューに表示するデータを渡すこともできます。

コード: viewDidLoad に次のコードを追加します。

m_TableView1 = [[UITableView alloc] initWithFrame:yourFrame];
m_TableView1.tag = 100;
    m_TableView1.dataSource = self;
    m_TableView1.delegate = self;
    [self.view addSubview: m_TableView1];
    [m_TableView1 release];



m_TableView2 = [[UITableView alloc] initWithFrame:yourFrame];
m_TableView2.tag = 101;
    m_TableView2.dataSource = self;
    m_TableView2.delegate = self;
    [self.view addSubview: m_TableView2];
    [m_TableView2 release];

次に、データソースとデリゲート メソッドでタグを使用し、次のように適切なデータを提供します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     static NSString *CellIdentifier = @"Cell";
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
            if (cell == nil) {
                cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

            }
    if(tableView.tag == 100)
       cell.titleLabel.text = [NSString stringWithFormat:"First table, cell%d",indexPath.row];
   else
     cell.titleLabel.text = [NSString stringWithFormat:"Second table, cell%d",indexPath.row];

}
于 2012-10-08T09:19:17.157 に答える
1

同じクラスに2 つ以上を作成するか、1 つUITableViewsのクラスに対して異なる配列を作成してUITableViewから、条件を使用してそれらの配列を同じテーブルに追加する必要があります。あなたが私の主張を理解したことを願っています。本当に必要でない限り、異なるクラスの方法を使用しないでください。

UITableViewsまた、これにより、異なるクラスとは異なるものをインポートする手間が省け、メモリ管理も削減されます。

于 2012-10-08T09:16:14.830 に答える
0
-(IBAction) segmentedControlChanged
{
     switch(segmentedControl.selectedSegmnentIndex)
     {
        case 0:
         //default first index selected. 
         [tableView setHidden:NO];
      if([self.view viewWithTag:9999]){
      [[self.view viewWithTag:9999]removeFromSuperView]; //remove other table
     }
}
         break;
         case 1:
         NewViewController *controller=[[NewViewController alloc] initWithNibName:@"NewViewController" bundle:nil];
         [self.view addSubView:controller.view];
        [controller.view setTag:9999];
         break;
         default:
         break;
     }
}

    enter code here
于 2012-10-10T09:36:02.860 に答える
0

このように変更します。

1>デフォルトで1つのTableviewとSegmentation Controlを取得し、最初のセグメントが選択され、最初のTableビューが正面図であり、そのuserinteractionをfalseに設定します

2>2 番目のセグメントが選択されている場合、最初のテーブルビューを非表示にして古いテーブルビューを送り返し、2 番目のテーブル ビューを前面に表示して表示できるようにします。userinteraction を true に設定します。

于 2012-10-08T11:14:11.833 に答える