Добавление пользовательского заголовка UITableViewController в Xcode 10

Я слежу за 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. Я изменил размер HeaderViewUIView на 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 и отображает черный экран?

Если вы используете руководство, основанное на Xcode 5, вам действительно следует найти более новый учебник. Многое изменилось.

rmaddy 08.04.2019 22:12

Я делаю это, потому что в моей работе есть приложения, которые нуждаются в обслуживании, и это материалы, которые мне предоставили. Так что я обходюсь тем, что есть.

K. Shores 08.04.2019 22:16
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это проблема

I have also connected the File's Owner view to the UIView in interface builder.

Поскольку владельцем файла является ваш контроллер представления, вы переопределяете существующее представление, которым является таблица. Вот почему вы видите только заголовок, а не таблицу. Вам нужно определить другую переменную, которая является IBOutlet, и вместо этого связать заголовок с ней.

Да, да, да. Ты прав. Я создал свойство выхода, но я подключился к существующему представлению, а не к свойству, которое я сделал. Ошибка новичка. Спасибо.

K. Shores 08.04.2019 22:15

Другие вопросы по теме