2014-10-21 4 views
1

Я пытался реализовать представление, подобное iOS-приложению Twitter. Контроллер представления содержит свиток, который можно прокручивать по горизонтали, на каждой странице прокрутки есть табличное представление. Для простоты я просто создал два UITableView и добавил их внутри двух контейнеров UIView, потому что помимо tableView у меня также есть некоторое представление, чтобы показать, поэтому tableView и все другие представления добавляются в качестве подвидных объектов viewContainer для каждой страницы.Tableview в scrollview не отображается

мнение иерархия выглядит так:

UIViewController 
--view 
    --scrollView 
    --view1 
     --tableView1 
     --someOtherViews 
    --view2 
     --tableView2 
     --someOtherViews 

В методах viewDidLoad, я осуществил что-то вроде этого:

-(void)viewDidLoad 
{ 
    //Some other setup... 

    scrollView = [[UIScrollView alloc]initWithFrame(0,y0,self.view.frame.size.width,self.view.frame.size.height-offset)]; 
    scrollView.pageEnabled = YES; 
    scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 2, self.view.frame.size.height - offset); 
    [self.view addSubView:scrollView]; 

    view1 = [[UIView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height-offset)]; 
    tableView1 = [[UITableView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height-offset) style:UITableViewStyleGrouped]; 
    tableView1.delegate = self; 
    tableView1.dataSource = self; 
    //other setup... 
    [view1 addSubView:tableView1]; 
    [scrollView addSubView:view1]; 

    view2 = [[UIView alloc]initWithFrame:CGRectMake(self.view.frame.size.width,0,self.view.frame.size.width,self.view.frame.size.height-offset)]; 
    tableView2 = [[UITableView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height-offset) style:UITableViewStyleGrouped]; 
    tableView2.delegate = self; 
    tableView2.dataSource = self; 
    //other setup... 
    [view2 addSubView:tableView2]; 
    [scrollView addSubView:view2]; 
} 

Для целей тестирования, я заполнить тот же источник данных для обеих таблиц. Проблема в том, что если я добавлю только один контейнер tableView (например, view1, который включает tableView1) в качестве подвидного элемента scrollView, представление показывает идеально, можно перейти на вторую страницу, которая пуста, а контроллер вида может быть загружен и показать. То же самое для второго.

Однако, если я использую приведенный выше код, который добавляет оба контейнера представления в качестве подвидного элемента scrollView, приложение будет сбой при загрузке этого контроллера представления. Однако, если я добавлю второй контейнер представления (view2 или view1), но в контейнере представления я не добавляю tableView в качестве своего подвидного, но имеет другие подвид, он отлично работает.

Итак, я понял, что проблема, вероятно, происходит из двух табличных представлений. Тем не менее, я попытался отладить это в течение нескольких часов и до сих пор не повезло. Кто-нибудь может мне помочь?

Спасибо!

+0

Я сомневаюсь, что 'CGRect'' UITableView' специально эта строка 'self.view.frame.size.height-offset' проверяет фрейм. – iphonic

+0

@iphonic Спасибо! Но я немного смущен. Не могли бы вы объяснить больше? CGRect таблицыView является правильным, если у меня есть только один tableView. Вы предлагаете при добавлении двух табличных представлений, CGRect второго из первого фактически изменился? – Jing

+0

Я бы предложил несколько вещей. 1. Ваш процесс неправильный, лучше составить отдельный xib с классом и спроектировать ваше представление. 2. Управляйте всем там, включая источник данных и делегатов и т. Д., И просто используйте xib для добавления напрямую. Может быть несколько причин, по которым его не работает для вас, может быть конфликтующим источником данных, или делегаты не получают вызова и т. Д. – iphonic

ответ

0

Я думаю, что это что-то с вами UITableViewDelegate или DataSource методов. Возможно, это причина, по которой вы рухнули.

-Suggestion:

пытаются сделать ваши UITableView S как Ивар и dataSource методов указать Tableview вы хотите

как:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section 
{ 
    if(tableView == _tableView1) 
     return _table1DataSource.count; 
    else 
     return _table2DataSource.count; 
} 

попробовать сделать это для других методов ,

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