I have a UITableView that displays expenses from the current month (see screenshot):
My problem is with the header for empty sections. is there any way to hide them? Data is loaded from coredata.
this is the code that generates the header header:
TitleForHeader
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ if ([tableView.dataSource tableView:tableView numberOfRowsInSection:section] == 0) { return nil; } else { NSDate *today = [NSDate date ]; int todayInt = [dataHandler getDayNumber:today].intValue; NSDate *date = [NSDate dateWithTimeIntervalSinceNow:(-(todayInt-section-1)*60*60*24)]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:[[NSLocale preferredLanguages] objectAtIndex:0]]]; [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; NSString *formattedDateString = [dateFormatter stringFromDate:date]; return formattedDateString;} }
ViewForHeader
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ if ([tableView.dataSource tableView:tableView numberOfRowsInSection:section] == 0) { return nil; } else { UIView *headerView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 312, 30)]; UILabel *title = [[UILabel alloc]initWithFrame:CGRectMake(4, 9, 312, 20)]; UIView *top = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 312, 5)]; UIView *bottom = [[UIView alloc]initWithFrame:CGRectMake(0, 5, 312, 1)]; [top setBackgroundColor:[UIColor lightGrayColor]]; [bottom setBackgroundColor:[UIColor lightGrayColor]]; [title setText:[expenseTable.dataSource tableView:tableView titleForHeaderInSection:section]]; [title setTextColor:[UIColor darkGrayColor]]; UIFont *fontName = [UIFont fontWithName:@"Cochin-Bold" size:15.0]; [title setFont:fontName]; [headerView addSubview:title]; [headerView addSubview:top]; [headerView addSubview:bottom]; return headerView; } }
heightForHeader
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { NSLog(@"Height: %d",[tableView.dataSource tableView:tableView numberOfRowsInSection:section] == 0); if ([tableView.dataSource tableView:tableView numberOfRowsInSection:section == 0]) { return 0; } else { return 30; } }
numberOfRowsInSection
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { int rows = 0; for (Expense* exp in [dataHandler allMonthExpenses]) { if ([exp day].intValue == section) { rows++; } } return rows; }
Sebastian
ios objective-c uitableview tableview
Sebastian Flรผckiger Mar 16 2018-12-12T00: 00Z
source share