Пользовательские представления заголовка раздела UITableView ломаются - PullRequest
0 голосов
/ 22 июля 2009

У меня есть пользовательский подкласс UIView, который я пытаюсь использовать в качестве заголовка для одного из моих сгруппированных разделов табличного представления. Я сохраняю экземпляр этого представления в tableViewController и использую его для возврата высоты раздела заголовка, а также самого представления. проблема заключается в том, что эта переменная экземпляра каким-то образом изменяется с UIView на CALayer в середине вызова reloadData, что вызывает сбой, поскольку экземпляр имеет специальный метод для возврата ожидаемой высоты. это код, который вылетает:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{   
    if (section == 0)
    {
        return [self.dataHeader frameHeight];
    }
    return 0.0f; 
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    if (section == 0)
    {       
        return self.dataHeader;
    }
    return nil; 
}

Я установил точку останова при первом возврате в блоке if метода heightForHeaderInSection, и он достиг ее 4 раза; первые три возвращают dataHeader успешно, в то время как четвертый раз показывает, что он является CALayer, и вылетает с исключением с помощью doNotRecognizeSelector (мое табличное представление имеет 2 раздела, если это имеет значение). Есть ли причина, по которой это происходит, и есть ли способ остановить это?

Ответы [ 2 ]

2 голосов
/ 22 июля 2009

Как выглядит ваш код инициализации для dataHeader? Когда вы инициализируете dataHeader, вы правильно его сохраняете?

Я предполагаю, что ваше представление dataHeader будет выпущено раньше, чем вы предполагали.

0 голосов
/ 22 июля 2009

Кажется, проблема в том, что у вас есть 2 раздела, и приложение почему-то считает, что их 4. Вот как я бы отладил эту проблему:

1) Что возвращает numberOfSectionsInTableView (реализовано ли это)?

Я предполагаю, что каждый метод заголовка должен вызываться n раз, где n - это количество разделов в вашей таблице. Я также предположил бы, что приложение спрашивает вышеупомянутого делегата, что n.

2) Каковы значения разделов при каждом вызове этих делегатов?

Должен быть только один вызов на раздел, если я что-то упустил, и я был бы удивлен, если бы делегат вызывался более одного раза с тем же значением раздела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...