Несколько вещей для проверки:
myTableHeaderView также должен быть IBOutlet или создан где-то в коде в вашем классе
self.myTableHeaderView не должно быть равно нулю, когда вы пытаетесь добавить его в качестве представления заголовка таблицы. Если это ноль, значит, вы неправильно подключили свои розетки
если вы разработали заголовок табличного представления в IB в своем собственном файле .xib, то вы должны где-то вызвать это (viewDidLoad - хорошее место):
[[NSBundle mainBundle] loadNibNamed:@"MyTableViewHeader" owner:self options:nil];
Владелец файла MyTableViewHeader.xib должен быть вашим подклассом TableViewController, и вы должны подключить объект myTableHeaderView к соответствующему выходу владельца файла.
РЕДАКТИРОВАТЬ: в ответ на "что делает [[NSBundle mainBundle] loadNibNamed:@"MyTableViewHeader" owner:self options:nil];
" делать?
Эта маленькая строчка содержит магию, которая откроет вам глаза на то, как файлы XIB и объекты Objective-C работают вместе в Какао (касание), поднимая кунг-фу программирования на iOS на совершенно новый уровень. Есть два класса программистов Какао: те, кто понимает, что он делает, использует и извлекает из этого пользу, и те, кто еще не знает, чего им не хватает, и вместо этого натыкается на пустыню, пытаясь создать файлы XIB для своих объектов и никогда не заставить его работать.
С этим огромным наращиванием вот детали:
Файл XIB (NIB) - это коллекция заархивированных объектов Objective-C (и ссылок на объекты, которые на самом деле не находятся внутри XIB, такие как «Владелец файла», так называемый «прокси-объект») и связей между этими объектами. Когда файл XIB загружен, эти заархивированные объекты возвращаются к жизни именно в том состоянии, в котором они были сохранены в XIB, , а затем соединения между этими живыми объектами (и "прокси-объектами") выполняются в соответствии с соединения, записанные в файле XIB.
Например, в вашем стандартном файле .xib подкласса UIViewController у вас в качестве владельца файла установлен класс MyViewController. Внутри .xib находится объект UIView, который обычно сам содержит другие объекты UIKit. Выход "view" класса UIViewController указывает на объект UIView в .xib. Когда этот файл .xib загружен, объект UIView разархивируется и становится живым объектом UIView со всеми свойствами и настройками, записанными в .xib. Это «разархивирующая часть».
А затем , из-за подключения в .xib от владельца файла (класс MyViewController) к объекту UIView, указатель на этот новый объект UIView сохраняется в поле «вид» вашего MyViewController пример. Любые другие соединения, также присутствующие в файле .xib, такие как UILabels, действия UIButton и т. Д., Также настраиваются для любых других полей «IBOutlet» в MyViewController.
Все это похоже на магию и происходит с
(id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle
метод при запуске нового подкласса UIViewController.
Теперь самое интересное: вы сами можете связать файлы пера с объектами! Вы можете использовать метод loadNibNamed:owner:options
, чтобы связать любой файл .xib с соответствующим набором nO IBOutlets в любом объекте, который вы хотите !!!
Внезапно, создавая полностью настраиваемые ячейки табличного представления, верхние и нижние колонтитулы таблицы, что угодно, вы легко можете написать модульные многократно используемые компоненты UIView и т. Д., Все это выложено в Interface Builder.
Объект, ноль IBOutlets которого вы хотите заполнить объектами, загруженными из файла .xib, является объектом "owner". Обычно (но я не уверен, что это абсолютно необходимо, любой класс с идентично типизированным и именованным IBOutlets, установленным в значение Владелец файла, может работать), этот класс будет указан как «Владелец файла» в сиб.
ОК, теперь у вас есть существующий объект-владелец с nil IBOutlets (IBOutlets должен быть nil, иначе они не будут изменены, это «правило» загрузки XIB в объект-владелец. Хорошо, что некоторые IBOutlets не ноль, они просто не будут изменены при загрузке файла XIB, и обычно это то, что вы хотите), и у вас есть файл .xib с объектами, которые вы хотите загрузить в объект владельца. Звоните:
[[NSBundle mainBundle] loadNibNamed:@"MyXIBFileToLoad" owner:theOwner options:nil];
.. и вуаля! Теперь все nil IBOutlets в "theOwner", которые связаны с объектами в MyXIBFileToLoad.xib, были установлены на новые объекты, загруженные из файла XIB.
(также этот метод возвращает массив всех объектов, разархивированных из xib. Если вам не нужна настройка каких-либо выходов владельца, вы можете просто найти в этом списке ваши объекты по классу и по тегу).
Вот и все, теперь сходите с ума от новых способов связать классы Objective-C с объектами, хранящимися в файлах XIB!