0

私にとっては少し混乱していますが、私は非常に小さな間違いを犯していると確信しています。私を正しい方向に導いてください。以下がその様子です。

2 つのセグメントを持つ OneViewController があります。Segment1はデフォルトで選択されているため、Segment1のコードはOneViewController(tableviewControllerではなく、tableViewを表示したいので手動でコードを記述したい)で記述されているため、すでに機能しています。セグメント 2 をクリックすると、別の tableViewController (TwoTableViewController というクラスを作成したもの) を表示する必要があります。そして、両方の tableView が同じビューに表示されるようにしたい (新しいビューをプッシュしない)。最も重要なことは、セグメント化されたコントロールが消えないようにすることです。

コードの関連部分も添付しました。以前にも同様の質問をしたことは知っていますが、本当に混乱していたので、最初からやり直すことにしました。私が許されることを願っています!:)

コードは次のとおりです。

 -(void)viewDidLoad
{
  //has the elements I want to display when I click on segment 1. since it is already selected , I have written it here
}
    -(IBAction) segmentedControlChanged
    {
         switch(segmentedControl.selectedSegmnentIndex)
         {
            case 0:
             //default first index selected. 
             [tableView setHidden:NO];
             if(self.view viewWithTag==9999]{
              [[self.view viewWithTag:9999]removeFromSuperView]; 
                  }
              break;

             case 1:
             NewTableViewController *controller=[[NewTableViewController alloc] initWithNibName:@"NewTableViewController" bundle:nil];
             [controller.view setTag:9999];         
             break;
             default:
             break;
         }
    }

NewTableViewController には個別のメソッドがあり、データソースとデリゲートは IB で TableView に設定されています。やりたいことは、Segment2 をクリックしたときにこの NewTableViewController を呼び出すことだけです。

4

4 に答える 4

0

2番目のViewControllerを表示するには、ナビゲーションコントローラーを押すか、モーダルで表示するか、segmentedcontrolの代わりにタブバーコントローラーを使用します。

私の提案は

UIViewControllerをサブクラス化するクラスを宣言します。下部にsegmentedControlを追加し、その上にuitableviewを追加します。

ユーザーがセグメントをクリックするたびに、対応するデータを使用してテーブルビューを再読み込みします。このようにして、メモリを節約できます。そして、ビューの削除/追加/非表示の面倒を見る必要はありません..

于 2012-10-10T13:17:20.847 に答える
0

UITableViews のコードを同じクラス ( OneViewController 内)に入力して記述することをお勧めします。

以下の方法で、現在のtableViewを特定できます

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

     int numberOfSections = 0;

     if(tableView == yourTableViewOne){

           numberOfSections =  5;
       }

     else if (tableView == yourTableViewTwo){

          numberOfSections = return 3;
     }

  return numberOfSections;
}

他のすべての UITableView デリゲートで同じチェックを使用します。

于 2012-10-10T12:07:20.023 に答える
0

次のコードCase 1:-(IBAction) segmentedControlChanged

[self.view addSubview:self.YourTableView];
于 2012-10-10T12:25:48.357 に答える
0
//view1,view2 are uiviews not a view controllers-(IBAction) segmentedControlChanged

-(void)segcontrol
{
    if(segments.selectedSegmentIndex==0)
    {
      self.view=view1;

    }
    else 
    {
        self.view=view2;
    }

}
于 2012-10-10T12:38:17.523 に答える