Я слежу за 4-м изданием iOS Programming, The Big Nerd Ranch Guide. Я использую Xcode 10.0, в то время как в книге используется Xcode 5.0, и я выполняю развертывание на iPad 6-го поколения под управлением iOS 11.0. Я нахожусь в главе 9, и я пытаюсь добавить собственное представление заголовка для UITableViewController
производного класса, ItemsViewController
.
Я создал пустой файл пользовательского интерфейса с именем HeaderView.xib
. В этом файле я создал UIView
с двумя кнопками из конструктора интерфейсов. Я установил тип класса владельца файла на ItemsViewController
. Я изменил размер HeaderView
UIView
на Freeform и изменил размер представления, чтобы он соответствовал размеру кнопок. Я установил цвет фона HeaderView
на чистый. Я также подключил представление владельца файла к UIView
в построителе интерфейса.
Внутри ItemsViewController я добавил свойство IBOutlet UIView*
для подключения HeaderView
к ItemsViewController
. Я написал метод экземпляра - (UIView*)headerView
для загрузки пакета представления заголовка.
- (UIView*)headerView
{
if (!_headerView)
{
[[NSBundle mainBundle] loadNibNamed:@"HeaderView" owner:self options:nil];
}
return _headerView;
}
А затем в viewDidLoad
я устанавливаю вид заголовка.
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"UITableViewCell"];
UIView* header = self.headerView;
[self.tableView setTableHeaderView:header];
}
Когда я развертываю и запускаю приложение, я получаю черный экран с двумя добавленными кнопками. Если я удалю последние две строки viewDidLoad
, приложение нормально загрузится с некоторыми фиктивными данными, которые я сделал.
Почему HeaderView
перезаписывает все параметры отображения ItemsViewController
и отображает черный экран?
Я делаю это, потому что в моей работе есть приложения, которые нуждаются в обслуживании, и это материалы, которые мне предоставили. Так что я обходюсь тем, что есть.
Это проблема
I have also connected the File's Owner view to the UIView in interface builder.
Поскольку владельцем файла является ваш контроллер представления, вы переопределяете существующее представление, которым является таблица. Вот почему вы видите только заголовок, а не таблицу. Вам нужно определить другую переменную, которая является IBOutlet
, и вместо этого связать заголовок с ней.
Да, да, да. Ты прав. Я создал свойство выхода, но я подключился к существующему представлению, а не к свойству, которое я сделал. Ошибка новичка. Спасибо.
Если вы используете руководство, основанное на Xcode 5, вам действительно следует найти более новый учебник. Многое изменилось.