2015-01-11 3 views
1

Я создаю табличное представление при показе 1-10 строк, все работает нормально. Однако при добавлении более 10 строк. Он строит, но в симуляторе он показывает только 10 строк.TableView не показывает более 10 строк

Вот мой код:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    self.greekLetters= 
    @[@"CHEM 1100",@"CHEM 2100 ",@"CHEM 3415W",@"CHEM 3511",@"CHEM 3521",@"CHEM 4600",@"PHYS 1150",@"PHYS 2150",@"MATH 1201",@"MATH 1206",@"Adv courses",@"CHEM 2700"]; 

} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    return [self.greekLetters count]; 
} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    NSString *[email protected]"SimpleIdentifier"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: SimpleIdentifier]; 

    if (cell ==nil) { 
     cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:SimpleIdentifier]; 
    } 
    cell.textLabel.text=self.greekLetters[indexPath.row]; 

    if(indexPath.row==0) [email protected]"General Chemistry I"; 
    if(indexPath.row==1) [email protected]"General Chemistry II"; 
    if(indexPath.row==2) [email protected]"Analytical Chemistry"; 
    if(indexPath.row==3) [email protected]"Organic Chemistry I"; 
    if(indexPath.row==4) [email protected]"Organic Chemistry II"; 
    if(indexPath.row==5) [email protected]"Physical Chemistry(HP)"; 
    if(indexPath.row==6) [email protected]"General Physics I"; 
    if(indexPath.row==7) [email protected]"General Physics II"; 
    if(indexPath.row==8) [email protected]"Calculus I"; 
    if(indexPath.row==9) [email protected]"Calculus II"; 
    if(indexPath.row==10) [email protected]"pick 5 creit"; 
    if(indexPath.row==11) [email protected]"Introduction to Inorganic Chemistry"; 

    return cell; 

} 

-(NSIndexPath *) tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

     return indexPath; 

    } 

ли проблема моего кода или тренажере, пожалуйста? Это потому, что, когда я кладу столик на строительную доску, что-то не так, пожалуйста?

+0

В серии уроков YouTube, на которых вы можете основываться, есть некоторые очень странные вещи :( – Abizern

+0

Да, я просто следую этому учебнику. Но я не вижу никаких проблем в таком простом коде. – user4441082

+0

Вы уверены, что ваш табличный вид полностью находится в рамках раскадровки? Правильно ли вы установили ограничения? – Abizern

ответ

2

Есть одна из двух проблем. Либо возникает проблема с методами UITableViewDataSource (что, похоже, не так), или сам вид таблицы не является правильным.

Для этого второго сценария (где представление таблицы было помещено в представление контроллера вида, но имеет неправильный размер), есть два способа диагностировать это. Техник старой школы для запуска программы в отладчике, приостановить выполнение, и введите po [[UIWindow keyWindow] recursiveDescription] в (lldb) строки:

(lldb) po [[UIWindow keyWindow] recursiveDescription] 
<UIWindow: 0x7b7956b0; frame = (0 0; 320 480); gestureRecognizers = <NSArray: 0x7b795b30>; layer = <UIWindowLayer: 0x7b795670>> 
    | <UIView: 0x7c943380; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0x7c9434f0>> 
    | | <UITableView: 0x7d064a00; frame = (0 0; 600 600); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7c941de0>; layer = <CALayer: 0x7c93d3f0>; contentOffset: {0, 0}; contentSize: {600, 528}> 
    | | | <UITableViewWrapperView: 0x7c942830; frame = (0 0; 600 600); gestureRecognizers = <NSArray: 0x7c942df0>; layer = <CALayer: 0x7c942b30>; contentOffset: {0, 0}; contentSize: {600, 600}> 
    | | | | <UITableViewCell: 0x7c955b50; frame = (0 484; 600 44); text = 'CHEM 2700'; autoresize = W; layer = <CALayer: 0x7c955ce0>> 
    | | | | | <UITableViewCellContentView: 0x7c955d30; frame = (0 0; 600 43.5); gestureRecognizers = <NSArray: 0x7c955f40>; layer = <CALayer: 0x7c955da0>> 
    | | | | | | <UITableViewLabel: 0x7c955f90; frame = (15 12; 93 20.5); text = 'CHEM 2700'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7c956050>> 
    | | | | | | <UITableViewLabel: 0x7c9562c0; frame = (314.5 12; 270.5 20.5); text = 'Introduction to Inorganic...'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7c956380>> 
    | | | | | <_UITableViewCellSeparatorView: 0x7c956680; frame = (15 43.5; 585 0.5); layer = <CALayer: 0x7c956700>> 
    | | | | ... 

Если посмотреть на примере выше, основной UIView имеет размер 320х480, но в таблице вид с любопытством имеет размер 600x600. Это не хорошо. Они должны быть одинакового размера, если вы хотите, чтобы представление таблицы правильно прокручивалось.

Другой способ диагностировать это в Xcode 6, чтобы запустить приложение в отладчик, а затем вы можете приостановить выполнение, а затем нажмите кнопку Отладка иерархии:

debug view hierarchy

Если вы делаете что , вы увидите иерархию вида, и если есть какие-то представления, неправильный размер, они будут выделяться так:

view hierarchy debugging screen

с точки зрения фиксации этого, типичное решение чтобы убедиться, что у вас есть все ограничения для просмотра таблицы (например,здесь я выбрал вид таблицы и я добавляю ведущий, завершающую, верхние и нижние ограничения):

add constraints

Затем, когда я повторно запустить приложение и посмотреть на иерархию представления, все совпадает красиво:

(lldb) po [[UIWindow keyWindow] recursiveDescription] 
<UIWindow: 0x7bc34ee0; frame = (0 0; 320 480); gestureRecognizers = <NSArray: 0x7bc352f0>; layer = <UIWindowLayer: 0x7bc32680>> 
    | <UIView: 0x7ba387d0; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0x7ba38940>> 
    | | <UITableView: 0x7d08d400; frame = (0 0; 320 480); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7ba37260>; layer = <CALayer: 0x7ba32a80>; contentOffset: {0, 0}; contentSize: {320, 528}> 
    | | | <UITableViewWrapperView: 0x7ba37ca0; frame = (0 0; 320 480); gestureRecognizers = <NSArray: 0x7ba38260>; layer = <CALayer: 0x7ba37fa0>; contentOffset: {0, 0}; contentSize: {320, 480}> 
    | | | | <UITableViewCell: 0x7ba3f270; frame = (0 0; 320 44); text = 'CHEM 1100'; autoresize = W; layer = <CALayer: 0x7ba3f5a0>> 
    | | | | | <UITableViewCellContentView: 0x7ba3faf0; frame = (0 0; 320 43.5); gestureRecognizers = <NSArray: 0x7ba40400>; layer = <CALayer: 0x7ba3fcc0>> 
    | | | | | | <UITableViewLabel: 0x7ba40840; frame = (15 12; 93 20.5); text = 'CHEM 1100'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7ba40b20>> 
    | | | | | | <UITableViewLabel: 0x7ba44a10; frame = (153.5 12; 151.5 20.5); text = 'General Chemistry I'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7ba44ad0>> 
    | | | | | <_UITableViewCellSeparatorView: 0x7ba456a0; frame = (15 43.5; 305 0.5); layer = <CALayer: 0x7ba45840>> 
    | | | | ... 
+0

Он прислал мне код, это был табличный размер фиксированного размера, поэтому он не изменялся для более крупных телефонов. Хорошее объяснение процесса отладки. :) – Abizern

+0

Да, я только видел ваше сообщение после того, как я представил мое, но проблема была довольно очевидна из его описания. Мне потребовалось всего несколько минут, чтобы сделать снимки экрана и т. Д. Но похоже, что мы пришли к аналогичным выводам. – Rob

+0

Спасибо за ваше объяснение в такой детали. Могу ли я спросить, что в вашей последней цифре вы добавили 4 ограничения, установив 4 «0», пожалуйста? – user4441082

1

Как я и предполагал, у вас был фиксированный размер для вашего стола. Это означало, что он был достаточно большим для iPhone4, но на более высоких устройствах табличное представление не изменялось, что означало, что табличное представление не заполняло экран, и вы видели только первые 10 строк, хотя вы могли прокручивать, чтобы увидеть все предметы.

Все, что я сделал, это добавить правильные ограничения компоновки в таблицу, чтобы их можно было привязать, чтобы они соответствовали представлению.

Что касается видеоролика YouTube, с которого вы взяли свою базу, я видел некоторых из них сегодня днем, и хотя они с энтузиазмом, у них есть некоторые плохие практики в них, которые вы не хотите привыкать. Попробуйте бесплатный курс Стэнфорда, который доступен в iTunes. Может быть, немного сложнее, но вы узнаете намного больше.

https://itunes.apple.com/gb/course/developing-ios-7-apps-for/id733644550

1

Табличка сложна для прокрутки вниз в симуляторе. У меня была такая же проблема. То, что я сделал, было нажато левой кнопкой мыши на Магическую мышь и нажал вниз, а затем переместил мышь «Вверх», чтобы добавить остальные мои номера в Tableview. Надеюсь, что поможет

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