2011-05-24 4 views
9

Im using tableview для отображения некоторой информации в приложении викторины, над которым я работаю. Мой вопрос: как заставить tableview показывать только количество ячеек, которые мне нужны. Ive установить количество строк метод делегата, как это:Как ограничить количество ячеек UITableview?

-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 5; 
} 

, но в нижней части представления таблицы пустые ячейки, которые не нужны. Если я установил стиль tableview для группировки, я получу 5 ячеек, а под ними не будет пустых. Я видел, что другие люди сделали это, но, похоже, не работают. Мне было интересно, если они каким-то образом добавили пользовательский вид в нижний колонтитул таблицы, чтобы отменить пустые ячейки?

Любые идеи или помочь оценить.

+0

Неясно, хотите ли вы избегать использования сгруппированного стиля или иметь проблемы с его использованием? –

+0

У меня нет проблем, сгруппированных по стандартным UITableView. Я пытаюсь сказать, если я использую группировку и задаю количество строк в каждом разделе до 5, когда я запускаю приложение, я вижу 5 строк, а это всего 5 строк. Если, с другой стороны, я использую стандартное представление таблицы и устанавливаю количество строк в 5 строк, я вижу, что я получаю свои 5 строк, а затем под ними - дополнительное количество пустых строк, которые не имеют содержимого и не нужны, но являются поместите там только, чтобы заполнить экран вверх. –

ответ

1

Вы можете реализовать heightForRowAtIndexPath: и вычислить правильную высоту, чтобы отображать только 5 ячеек на экране.

0

Простым способом было бы уменьшить размер стола. То есть 5 ячеек по 20 точек каждый дает 100.0f, высота установки до 100.0f приведет к тому, что будет видно только 5 строк. Другой способ - вернуть больше строк, но строки 6,7 и т. Д. Будут некоторые представления с альфой 0, но это кажется громоздким. Вы пытались вернуть некоторое представление clerColor в виде footerView?

0

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

0

попробовать что-то вроде этого:

[table setFrame:CGRectMake(x, y, width, height*[list count])];

высота относится к высоте ячейки

2

Гораздо приятнее метод, который не требует изменения размера ячейки, чтобы отключить разделитель по умолчанию (установите style to none), а затем иметь разделительную линию в самой ячейке.

+0

Значит, это связано с созданием пользовательской ячейки в IB или мне нужно будет добавить сексетера в ячейку программно? –

+0

Вы тоже можете это сделать. Я обычно подкласса UITableViewCell, но вы можете добавить subview в contentview для обычного UITableViewCell. IB или код чисто до того, как вы предпочитаете работать ... –

0

Как сказал Nyx0uf, ограничение размера ячейки может выполнить это. Например:

- (CGFloat)tableView:(UITableView *)tabelView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CGFloat result; 

    result = 100; 

    return result; 
} 
2

У меня была аналогичная проблема, как показать только разделители для ячеек, содержащих данные.

Что я сделал следующее:

  1. Отключить сепараторы для всей Tableview. Это можно сделать в инспекторе для просмотра таблицы в построителе интерфейса или путем вызова [yourTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];.

  2. Внутри вашего cellForRowAtIndexPath, где вы заполняете свой табличный вид ячейками, создайте новый UIView и установите его как подпункт ячейки. Пусть фон этого вида светлый и слегка прозрачный. Вы можете сделать это с помощью следующих действий:

    UIView *separatorView = [[UIView alloc] initWithFrame:CGRectMake: 
                 (0, cell.frame.size.height-1, 
                  cell.frame.size.width, 1)]; 
    [separatorView setBackgroundColor:[UIColor lightGrayColor]]; 
    [separatorView setAlpha:0.8f]; 
    [cell addSubView:separatorView]; 
    

    Ширина этой точки зрения является 1 пиксель, который является таким же, как разделитель по умолчанию, он запускает длину ячейки, в нижней части.

Поскольку cellForRowAtIndexPath только называется так часто, как вы указали в numberOfRowsInSection эти подвиды будут созданы только для ячеек, которые обладают данными и должны иметь сепаратор.

Надеюсь, это поможет.

+0

awesome idea ... – stackOverFlew

1

У вас всегда будет 5 рядов? Если это динамическая ситуация, вы должны установить количество строк в соответствии с источником данных таблицы. Например:

return [postListData count]; 

Это возвращает количество записей в массиве, содержащем контент.

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

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 2; 
} 

Без этого в таблице будет только 1 секция. С его помощью, как вы думаете, вы можете указать количество разделов.

1

Это работало для меня - я имел дополнительные пустые строки в нижней части экрана на Iphone 5 -

В моем случае мне нужно 9 строк

- (CGFloat)tableView:(UITableView *)tabelView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{   
    return self.tableView.frame.size.height/9; 
} 
0

реализуют эти два метода в вашем UITableViewController :

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section 
{ 
    if (section == tableView.numberOfSections - 1) { 
     return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)]; 
    } 
    return nil; 
} 


- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section 
{ 
    if (section == tableView.numberOfSections - 1) { 
     return 1; 
    } 
    return 0; 
} 

в самом деле, эти коды говорят TableView, что вам не нужно оказывать Seperator линии для меня больше, так что она выглядит пустые ячейки не будут дис (на самом деле пустая ячейка также не может быть выбрана)

14

Если вы хотите сохранить разделитель, вы можете вставить фиктивный вид нижнего колонтитула. Это позволит ограничить TableView только показывают количество клеток вы вернулись в Tableview: numberOfRowsInSection:

self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 

В скор:

self.tableView.tableFooterView = UIView(frame: CGRectZero) 
+0

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

+2

В Swift 3: self.tableView.tableFooterView = UIView (frame: CGRect.zero) – KZD76

1

Это довольно просто. Просто установите размер popover следующим образом: self.optionPickerPopOver.popoverContentSize = CGSizeMake (200, 200); Конечно, вы можете настроить размер (200,200) в зависимости от размера содержимого и количества строк.

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