У меня была такая же проблема с видом = (ноль).Все дело в «делегатах».Мой tableView работал нормально, и все мои методы UITableView Delegate работали должным образом, однако viewForHeaderInSection: не реализовывался.
Я обнаружил, что XCode позволяет мне строить со слабосвязанной ссылкой с TableView, чего было недостаточно для метода "viewForHeaderInSection:".
Я также обнаружил, что XCode легко выдвигает«закодированное» пользовательское представление из метода viewForHeaderInSection: с той же самой слабой ссылкой, но с использованием IB, связь должна быть более точной.Требуется немного больше работы, но предлагает гораздо лучший опыт, как только вы приступите к созданию гораздо более сложных объектов.
Я использовал: NSLog([NSString stringWithFormat:@"%@", self.headerView]);
, чтобы убедиться, что представление выводилось как (ноль).
viewForHeaderInSection: метод вызывается первым, если nil или null, tableView вызывает «titleForHeaderInSection:» затем.(вы также можете использовать это в своих интересах).
Убедитесь, что ваша установка правильная и имеет смысл в том, как объекты работают друг с другом.
Примеры шагов, которые работали для меня:
(.h)
Правильно настройте viewController и объявите методы делегирования tableView.Я использовал универсальный UITableViewController, у меня не работал в сложной TabBar, с UINavigationControllers.
@interface YourViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, UIAlertViewDelegate, UIAccelerometerDelegate> {
Создайте все IBOutlets, которые будут на вашем взгляде:
IBOutlet UITableView *myTableView;
IBOutlet UIView *yourCustomHeaderView;
IBOutlet UIImageView *yourImageOnCustomView;
Назначить выделение памяти:
@property(nonatomic,retain) IBOutlet UITableView *yourTableView;
@property(nonatomic,retain) IBOutlet UIImageView *yourCustomHeaderView;
@property(nonatomic,retain) IBOutlet UIImageView *yourImageOnCustomView;
(. М)
Синтезируйте ваши переменные:
@synthesize yourTableView, yourCustomHeaderView, yourImageOnCustomView;
Реализуйте все ваши стандартные методы делегирования TableView, необходимые: плюс:
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
//Intialize the header View to present:
UIView *headerView;
//Display Section Headers for rows:
if (section == 0) {headerStatBar = self.yourCustomSectionHeaderView1;}
if (section == 1) {headerView = self.yourCustomSectionHeaderView1;}
if (section == 1) {headerView = self.yourCustomSectionHeaderView1;}
//Return the view to the Table:
return headerView;
}
Сделайте все ваши соединения вIB, самый простой способ:
- Просмотр ваших объектов с помощью "LIST VIEW", обеспечивает лучшее понимание и иерархию объектов
- Щелкните правой кнопкой мыши на "Владельце файла", чтобы открыть все ваши IBOutlets;
- Перетащите все свои соединения IBOutlet от Владельца файла к объекту, которым они управляют;т.е. (yourTableView -> tableView) или yourCustomHeaderView -> настроенное вами представление) и (yourImage -> настраиваемый UIImageView, который вы перетащили в свое настраиваемое представление.
Теперь, когда соединения установлены, у вас есть «ПОЛНЫЙ» контроль над аспектом каждого элемента, устанавливая любое свойство этого элемента, такое как self.yourCustomHeaderView.background = [UIColor redColor]; etc....
**. Убедитесь, что вы перетаскиваете из «TableView» в«Владелец файла», чтобы установить таблицу (делегат) и (источник данных) обратно владельцу файла, что происходит там, где все ваши методы делегата tableView!
Это просто самый простой шаг, вы можете сделать представление настолько сложным, насколько вам это нужно, один из моих viewForHeaderInSection: views имеет более 40 IBoutets для всех представлений, которые включают кнопки, изображения, метки, другие представления и т. д. *
Действительно пытались сохранитьвесь код в «блоках кода» просто не сработает, но вы все равно можете его прочитать.