2013-03-29 3 views
1

Я создаю приложение, в котором у меня есть класс UITableviewController, и в этом я имею файл IB с UITableView. В моем классе UIViewController я создаю UIPopOverController и назначая контроллер навигации для содержимого этого popover. В контроллере навигации rootView представляет собой объект контроллера UITableView. Проблема, с которой я работаю, - это отображение PopOver при нажатии кнопки «Бар», в которой отображается UITableView. Проблема в том, что в нем отображается только пустой элемент TableView, поскольку методы делегата и Datasource для TableView никогда не получают Called. Это я проверил при отладке. Я вставляю свой код здесь. Пожалуйста, ответьте, почему методы моего делегата и источника данных не вызываются.TableView в PopOverController

Это 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; 

     } 

Я также объявил IBOutlet о TableView в TableViewController класса. Протоколы Datasource и делегатов упоминаются в классе ViewController.h. Пожалуйста, помогите мне и простите меня, если вопрос о задаче неверен.

+0

TableViewController отдельный ViewController правильно? – Ganapathy

+0

Да, это отдельный контроллер представления с помощью только UItableView в XIB-файле. – Shikhar

ответ

0

Проблема связана с установкой делегата перед представлением таблицы. Теперь просто замените это как

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

[settingstable.tbl_settings reloadData]; 

после представления pickerview вот так.

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

Это работает хорошо для меня ..

+0

Спасибо большое. Теперь он работает отлично! – Shikhar

+0

Вы должны принять ответ @Shikhar – Matt

+0

ok! Спасибо Мэтту за то, что он дал мне знать об этом. – Shikhar

Смежные вопросы