1

私はUITableviewControllerクラスを持っているアプリケーションを作成しており、その中に を含む IB ファイルを持ってUITableViewいます。私のUIViewControllerクラスでは、ナビゲーションコントローラーを作成し、UIPopOverControllerそのポップオーバーの contentview に割り当てています。ナビゲーションコントローラーでは、rootView はUITableViewコントローラーオブジェクトです。私が取り組んでいる問題は、その中に表示されているバーボタンをクリックしたときの PopOver の表示ですUITableView。問題は、TableView のデリゲートおよびデータソース メソッドが呼び出されないため、空の TableView のみが表示されていることです。これは、デバッグ中に確認しました。ここにコードを貼り付けています。デリゲート メソッドとデータソース メソッドが呼び出されない理由を返信してください。

これはViewController.mです:-

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{

      self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
      if (self) {
      arr_settings = [[NSMutableArray alloc]           
      initWithObjects:@"shikhar",@"gulshan",@"bhargav", nil];

       //tbl_settings.delegate = self;
      // tbl_settings.dataSource = self;
      //self.title = @"Settings";
     //arr_settings = [[NSMutableArray alloc] 
     initWithObjects:@"shikhar",@"gulshan",@"bhargav", nil];

     // Custom initialization
   }
     return self;
 }

 -(IBAction)btn_settings:(id)sender{
  TableViewController * settingstable = [[TableViewController alloc] 
  initWithNibName:@"TableViewController" bundle:Nil];
  settingstable.tbl_settings.delegate = self;
  settingstable.tbl_settings.dataSource = self;
  //settingstable.tbl_settings.transform = CGAffineTransformMakeScale(1, 1);
  //settingstable.tbl_settings.tag = 1;
  //[self.view addSubview:settingstable.view];
  UINavigationController *nav = [[UINavigationController alloc]
  initWithRootViewController:settingstable];
  UIPopoverController * pickerPopover = [[UIPopoverController alloc] 
  initWithContentViewController:nav];

  pickerPopover.delegate = self;
  self.popovercontroller = pickerPopover;
  //CGRect popoverRect = [self.view convertRect:[_btn_settings frame] fromView: 
  [_btn_settings superview]];
  //popoverRect.size.width = MIN(popoverRect.size.width, 100);
  pickerPopover.popoverContentSize = settingstable.tbl_settings.frame.size;
  [settingstable.tbl_settings reloadData];
  [pickerPopover presentPopoverFromBarButtonItem:sender  
  permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
 }
  - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
      return 1;
    }

  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:
    (NSInteger)section
    {
       NSLog(@"%u",[arr_settings count]);
       return [arr_settings count];

    }

   // Customize the appearance of table view cells.
   - (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];
          if ([[UIDevice currentDevice] userInterfaceIdiom] ==  
          UIUserInterfaceIdiomPhone) {
          cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
         }
     }


          cell.textLabel.text = [arr_settings objectAtIndex:indexPath.row];
          NSLog(@"%@",cell.textLabel.text);
          return cell;

      }

また、TableViewController クラスで TableView の IBOutlet を宣言しました。Datasource およびデリゲート プロトコルは、ViewController.h クラスで言及されています。質問の仕方が間違っている場合は、助けてください。

4

1 に答える 1

0

問題は、テーブル ビューを表示する前にデリゲートを設定することが原因です。これを次のように置き換えるだけです

settingstable.tbl_settings.delegate = self;
settingstable.tbl_settings.dataSource = self;

[settingstable.tbl_settings reloadData];

このようにピッカービューを提示した後。

    TableViewController * settingstable = [[TableViewController alloc]
                                           initWithNibName:@"TableViewController" bundle:Nil];

    UINavigationController *nav = [[UINavigationController alloc]
                                   initWithRootViewController:settingstable];
    UIPopoverController * pickerPopover = [[UIPopoverController alloc]
                                           initWithContentViewController:nav];

    pickerPopover.delegate = self;
    self.popovercontroller = pickerPopover;

   [_btn_settings superview]];

    pickerPopover.popoverContentSize = settingstable.tbl_settings.frame.size;
    [pickerPopover presentPopoverFromRect:sender.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

    settingstable.tbl_settings.delegate = self;
    settingstable.tbl_settings.dataSource = self;

    [settingstable.tbl_settings reloadData];

これは私にとってはうまくいきます..

于 2013-03-29T10:43:50.630 に答える