Скрыть Null UItableView Ячейки/строки

В настоящее время у меня есть uitableview.

Данные получены из файла sqlite.

Каждый столбец файла sqlite будет представлять собой список: ярлыки, изображения и т. Д.

Код, который я использую для получения строк,

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
  AppDelegate* appdelegate = (AppDelegate*) [[UIApplication sharedApplication]delegate];
  return [appdelegate.arrayDatabase count];

}

Код для заполнения ячеек

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

  static NSString *simpleTableIdentifier = @"simpleTableIdentifier";

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
  if (cell == Nil)
  {
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:simpleTableIdentifier];
  }

  AppDelegate * appdelegate = (AppDelegate*)[[UIApplication sharedApplication]delegate];
  ShowsList *sShows = [appdelegate.arrayDatabase objectAtIndex:indexPath.row];
  cell.textLabel.text = [sShows strName ];
}

Проблема, с которой я сталкиваюсь:

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

Однако я хочу скрыть строки путем подсчета нулевых ячеек и применения счетчика к методу numberOfRowsInSection: или просто скрыть пустые ячейки.

Hide empty cells in UITableView & How to hide a section in UITableView? looks like something similar but didn't resolve my issue.

Может кто-нибудь, пожалуйста, указать мне правильный путь или дать ответ :)

спасибо

Томас

1
Вы задали делегат tableView как сам?
добавлено автор Anusha Kottiyal, источник
Вы задали делегат tableView как сам?
добавлено автор Anusha Kottiyal, источник
Вы получаете пустую строку как @ "" или что, в вашей модели/массиве?
добавлено автор Anoop Vaidya, источник
Что происходит в appdelegate.arrayDatabase? вы что-то получили?
добавлено автор Sudha Tiwari, источник
Что происходит в appdelegate.arrayDatabase? вы что-то получили?
добавлено автор Sudha Tiwari, источник
@sudha Если я делаю NSLog (@ "% d", [appdelegate.arrayDatabase count]); возвращается 30. Вместо этого я хочу считать только столбец 1 в базе данных. Это, я думаю, решит проблему. есть идеи?
добавлено автор Tom, источник
@sudha Если я делаю NSLog (@ "% d", [appdelegate.arrayDatabase count]); возвращается 30. Вместо этого я хочу считать только столбец 1 в базе данных. Это, я думаю, решит проблему. есть идеи?
добавлено автор Tom, источник

9 ответы

Добавить этот код

-(UIView *)tableView:(UITableView *)tableView viewFИЛИFooterInSection:(NSInteger)section{
    
    
    return [[UIView alloc]init];
    
}

ИЛИ

Существует альтернативное решение

вы можете установить высоту UITableView в функции numberOfRowsInSection , имеющей высоту как [количество массивов] * (высота ячейки)

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

1
добавлено
Спасибо за быстрый ответ. Но это dosnt, похоже, решает проблему. есть идеи?
добавлено автор Tom, источник

Добавить этот код

-(UIView *)tableView:(UITableView *)tableView viewFИЛИFooterInSection:(NSInteger)section{
    
    
    return [[UIView alloc]init];
    
}

ИЛИ

Существует альтернативное решение

вы можете установить высоту UITableView в функции numberOfRowsInSection , имеющей высоту как [количество массивов] * (высота ячейки)

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

1
добавлено
Спасибо за быстрый ответ. Но это dosnt, похоже, решает проблему. есть идеи?
добавлено автор Tom, источник

просто реализуйте метод reloadTableData, подобный этому

- (void)reloadTableData
{
// do a reload maybe from db and get yourobjects eg dbItems
// _tableItems = [NSMutableArray array];
    for (ShowsList *list in dbItems) {
        if ([list strName].length) {
            [_tableItems addObject:list];
        } 
    } 
}

то просто используйте массив _tableItems, чтобы заполнить таблицу

используйте [self reloadTableData] вместо [self.tableview reloadData]

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

  return _tableItems.count;

}

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

  static NSString *simpleTableIdentifier = @"simpleTableIdentifier";

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
  if (cell == Nil)
  {
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:simpleTableIdentifier];
  }

  ShowsList *sShows = [_tableItems objectAtIndex:indexPath.row];
  cell.textLabel.text = [sShows strName ];
}
1
добавлено
Большое спасибо за то, что указал мне в правильном направлении
добавлено автор Tom, источник

просто реализуйте метод reloadTableData, подобный этому

- (void)reloadTableData
{
// do a reload maybe from db and get yourobjects eg dbItems
// _tableItems = [NSMutableArray array];
    for (ShowsList *list in dbItems) {
        if ([list strName].length) {
            [_tableItems addObject:list];
        } 
    } 
}

то просто используйте массив _tableItems, чтобы заполнить таблицу

используйте [self reloadTableData] вместо [self.tableview reloadData]

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

  return _tableItems.count;

}

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

  static NSString *simpleTableIdentifier = @"simpleTableIdentifier";

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
  if (cell == Nil)
  {
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:simpleTableIdentifier];
  }

  ShowsList *sShows = [_tableItems objectAtIndex:indexPath.row];
  cell.textLabel.text = [sShows strName ];
}
1
добавлено
Большое спасибо за то, что указал мне в правильном направлении
добавлено автор Tom, источник

Вы должны создать изменяемую копию вашего объекта данных. Итерацию к нему сначала. Удалите нулевые/пустые записи. Теперь используйте эту модифицированную коллекцию для методов tableViewDelegate.

0
добавлено

Вы должны создать изменяемую копию вашего объекта данных. Итерацию к нему сначала. Удалите нулевые/пустые записи. Теперь используйте эту модифицированную коллекцию для методов tableViewDelegate.

0
добавлено

В вашем представленииDidLoad установите нижний колонтитул таблицы как:

[yourTableView.tableFooterView setFrame:CGRectMake(0, 0, yourTableView.frame.size.width, 1)];

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

0
добавлено

Предполагая, что вы получаете @ "" в модели, из которой вы заполняете UITableView.

Вы можете удалить этот пробел следующим образом:

[_arrays removeObjectIdenticalTo: @ ""];

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

0
добавлено

Предполагая, что вы получаете @ "" в модели, из которой вы заполняете UITableView.

Вы можете удалить этот пробел следующим образом:

[_arrays removeObjectIdenticalTo: @ ""];

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

0
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.