#ios #uitableview
#iOS #uitableview
Вопрос:
У меня есть требование отображать сообщение как «Без уведомления», когда массив пуст, но как только массив содержит данные, удалите представление нижнего колонтитула и отобразите данные в tableview.Я следовал приведенному ниже методу.
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection: (NSInteger)section
{
if(self.notificationDataArray.count == 0){
self.tableView.tableFooterView.hidden = NO;
return 50;
} else {
return 0;
}
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
if(self.notificationDataArray.count == 0){
UIView *view = [[UIView alloc]init];
view.frame = CGRectMake(0, 0, self.view.frame.size.width, [self tableView:tableView heightForFooterInSection:section]);
UILabel *textLabel = [[UILabel alloc]initWithFrame:view.frame];
[view addSubview:textLabel];
textLabel.textAlignment = NSTextAlignmentCenter;
textLabel.textColor = [UIColor blueTextColor];
textLabel.font = [UIFont boldSystemFontOfSize:16.0];
textLabel.text = @"No Notification";
return view;
} else {
return nil;
}
}
Но изначально перед вызовом API массив будет пустым, поэтому вид нижнего колонтитула появляется на долю секунды, а затем исчезает.Как изначально скрыть вид нижнего колонтитула, я имею в виду, до загрузки tableview.Кто-нибудь может предложить мне решение для этого,
спасибо.
Комментарии:
1. Скрыть его в videDidLoad?
2. — (void)viewDidLoad { [super viewDidLoad]; self.TableView.tableFooterView.hidden = YES;} .. я попробовал это, но тщетно, он снова появился на долю секунды
3. Почему бы просто не скрыть весь TableView, пока у вас не будет данных?
4. я попробовал описанный выше метод, но экран выглядит черным, когда tableview скрыт…..
5. если экран выглядит черным, это означает, что просмотр не был перенесен, поэтому вам нужно изменить цвет фона просмотра на белый, а не на чистый цвет
Ответ №1:
при просмотре загрузки вы делали это перед вызовом Api.
yourTableView.sectionFooterHeight = 0;
[[yourTableView tableFooterView] setHidden:YES];
-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
if ([yourArray count]==0) {
return nil;
}
return yourCustomView;
}
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
if ([yourArray count]==0) {
return 0;
}
return yourCustomViewHeight;
}
затем, после получения ответа, вы можете отобразить представление нижнего колонтитула, изменить значения по мере необходимости
Ответ №2:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
UIView *view = [[UIView alloc]init];
view.frame = CGRectMake(0, 0, self.view.frame.size.width, [self tableView:tableView heightForFooterInSection:section]);
if(self.notificationDataArray.count == 0)
{
UILabel *textLabel = [[UILabel alloc]initWithFrame:view.frame];
[view addSubview:textLabel];
textLabel.textAlignment = NSTextAlignmentCenter;
textLabel.textColor = [UIColor blueTextColor];
textLabel.font = [UIFont boldSystemFontOfSize:16.0];
textLabel.text = @"No Notification";
}
else
{
view.backgroundColor=[UIColor clearColor];
}
return view;
}
Ожидайте этого, вы также можете скрыть tableview, когда количество массивов равно нулю, и вы также можете изначально скрыть нижний колонтитул в своем методе viewDidLoad.
Комментарии:
1. Приведенный выше код изначально не скрывает вид нижнего колонтитула, и скрытие вида нижнего колонтитула в viewDidLoad также не сработало для меня..
Ответ №3:
Почему бы не использовать переменную экземпляра BOOL для указания загрузки данных.
BOOL dataLoaded;
Сначала viewDidLoad
установите для него значение NO
. И после загрузки данных вы можете сделать это как ДА.
dataLoaded = YES
Теперь условие проверки будет
if(self.notificationDataArray.count == 0 amp;amp; dataLoaded){
// Do your stuff
}
Ответ №4:
Не возвращайте nil вместо этого инициализируйте пустое представление с 0 кадром и верните это
if(self.notificationDataArray.count == 0){
UIView *view = [[UIView alloc]init];
view.frame = CGRectMake(0, 0, self.view.frame.size.width, [self tableView:tableView heightForFooterInSection:section]);
UILabel *textLabel = [[UILabel alloc]initWithFrame:view.frame];
[view addSubview:textLabel];
textLabel.textAlignment = NSTextAlignmentCenter;
textLabel.textColor = [UIColor blueTextColor];
textLabel.font = [UIFont boldSystemFontOfSize:16.0];
textLabel.text = @"No Notification";
return view;
} else {
UIView *view = [[UIView alloc]init];
view.frame = CGRectMake(0, 0, 0, 0);
return view ;
}
Ответ №5:
Я просто устанавливаю текст в разделе titleForFooterInSection. Пусто, если количество элементов равно 0. Текст не будет отображаться при загрузке таблицы.
-(NSString*)TableView:(UITableView *)TableView titleForFooterInSection:(NSInteger)раздел {
NSString *mensaje = @"";
NSInteger numberOfRowsInSection = [self tableView:self.tableView numberOfRowsInSection:section ];
if (numberOfRowsInSection == 0) {
mensaje = @"No notifications";
}
return mensaje;
}