2010-11-07 3 views
0

Я понимаю, что это популярная тема, и я просматривал множество сообщений здесь, но не нашел ничего, что помогло моей проблеме. Я новичок, для чего это стоит (как вы увидите по моему вопросу :-)Как добавить второй UITableView программно из UINavigationController

У моего приложения есть панель вкладок с 3 элементами. Первый загружает UINavigationController, который предназначен для развертывания 3-х экранов (сначала: UITableView, второй: отфильтрованный UITableView, третий: UIView). Я не могу, по жизни, выяснить, как программно отображать UITableView на втором экране.

Я переписываю - (void)loadView, так как я не использую IB. В разное время, я пытался что-то вроде:

- (void)loadView 
{ 
    [super loadView]; 

    // first option (thought for sure this would work) 
    [[self view] addSubview:secondTableView]; 

    // another... 
    [self tableView:secondTableView]; 

    // another... 
    [[[[self navigationController] topLevelController] view] addSubview:secondTableController]; 
} 

У меня есть настройки просмотра таблицы должным образом с его делегатом и источником данных, я просто не могу понять, как показать эту проклятую вещь. Второй контроллер также наследуется от UITableViewController. Кроме того, я не знаю, как вы можете сказать: «Подгоните это табличное представление в заголовке навигации и меню панели вкладок». Я использую CGRectMake() в настоящее время, чтобы угадать размеры, но кажется, что должен быть лучший способ (возможно, именно поэтому вы используете IB :-). В любом случае это второстепенно даже для того, чтобы что-то появилось в первую очередь.

Заранее благодарим за любые предложения.

ответ

0

Если вы наследуете UITableViewController, ваше представление должно быть UITableView, а не простым UIView, тогда, когда вы хотите создать представление программно, вы должны выделить его, инициализировать, установить его свойства и назначить его как представление вашего контроллера, Я еще не пробовал [super loadView], но он создает tableView для вас и назначает dataSource и делегирует себя, поэтому вам не нужно это делать. Так оно и должно идти, как этот

- (void)loadView { 
    UITableView *tempPointer = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480) andStyle:UITableViewStylePlain]; 
    self.view = tempPointer; // controller retains view property so we should release it 
    [tempPointer release]; 
    // If you want your view to be resized automatically (to fit) 
    self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 
    self.tableView.dataSource = self; 
    self.tableView.delegate = self; 
    //... 
} 

или

- (void)loadView { 
    [super loadView]; 
    self.tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 
    secondTableView = self.tableView; // or change your code to cope with self.tableView instead of secondTableView... 
    //... 
} 

очистить некоторые неопределенности в отношении создания вида иерархии, сохранения и т.д. в документации о как UIViewController и UITableViewController, если вы еще не сделали.

+0

Спасибо! Я также не знал о «autoresizingMask», полезном. – rpheath

0

вы пробовали:

[Self.navigationController pushViewController:secondTableView]; 

Надеется, что это помогает, если вы не могли бы дать немного больше, описывающему ситуацию.

+0

Спасибо, я закончил тем, что понял это, и это была совершенно несвязанная проблема. Трудно поверить ... Я разбираю XML, чтобы заполнить вторую таблицу, и у меня был didStartElement в качестве параметра в методе, который я переопределял, вместо didEndElement! Смешно ... Спасибо, хотя! – rpheath

+0

Рад, что вы его отсортировали. – Blounty

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