2010-03-02 2 views
9

У меня есть очень простой код, чтобы вернуть название для раздела заголовка:UITableView titleForHeaderInSection не отображается правильно

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
    if (section==0) { 
     return @""; 
    } else if (section==1) { 
     return @"Actions"; 
    } else if (section==2) { 
     return @"Attached To"; 
    } 

    return @""; 
} 

По какой-то причине, когда заголовки фактически отображаются на тренажере, половину времени они просто первая буква, а затем эллипсы. Прокрутка вверх и вниз (для более быстрого обновления заголовка) приведет к тому, что заголовок будет отображаться правильно примерно в половине случаев и покажет неверно другую половину времени.

Есть ли у кого-нибудь идеи, что может быть причиной этого? Я думаю, что это скорее недавнее развитие, но похоже, что это происходит почти во всех UITableView s в моем приложении. Я не хочу сказать, что это проблема 3,2, но, возможно, это произошло уже тогда, но в любом случае это должно быть связано с кодом каким-то образом. Спасибо.

ответ

5

Я цифра это: актуальная проблема с кодом возвращается @"". Если вы вернете только пустую строку, вместо nil, это вызовет проблему с отображением верхних и нижних колонтитулов.

Чтобы вернуть все верхние и нижние колонтитулы, необходимо вернуть строку с нулем. Возвращение пробела @" " по-прежнему оставляет вертикальное пространство для заголовка, что не является жизнеспособным вариантом. Я изменил все экземпляры return @""; на просто return nil;

1

i copy & поставил ваш код в один из моих проектов и работает безупречно. (sdk 3.2.1)

Возможно, ошибка находится в другой версии? Создают ли ваши собственные таблицы? Если да, возвращаете ли вы высоту apropiate из «tableView: heightForRowAtIndexPath:»? (эта проблема ударила меня один раз)

1

При настройке заголовков заголовков разделов я получил лучший успех при использовании пустой NSString, которая устанавливается в соответствующий раздел, а затем позже освобождает эту строку при завершении; а также ограничивает мое использование вложенных статусов If() Else().

Я стараюсь держать его простым и чистым. Конечно, для тех таблиц, где у меня более трех разделов, я использую оператор «Switch» вместо операторов If().

Замечательная вещь в этой функции заключается в том, что она вызывается как много раз (количество разделов), которые у вас есть, и будет проходить через код каждый раз. NSString *sectionHeader=nil; дает компилятору возвращаемое значение независимо от того, что встроено в ваши операторы if(). В противном случае вы получаете предупреждения, потому что компилятор не выполняет поиск в операторе If() для возвращаемого значения.

Вы также можете инициализировать строку со значением «по умолчанию», например. NSString *sectionHeader = @"Default Header Title";. Если не выполнение операторов If(), то выделенное значение заголовка по умолчанию останется неизменным во всей функции и, таким образом, будет возвращено как sectionHeader для Title.

Основная структура Ниже:

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 

//TEMP SECTION STRING HOLDER: 
NSString *sectionHeader = nil; 


//SET TITLE FOR EACH SECTION: 
if(section == 0) { 
    sectionHeader = @"Section Header No. 1"; 
} 

if(section == 1) { 
    sectionHeader = @"Section Header No. 2"; 
} 

if(section == 2) { 
    sectionHeader = @"Section Header No. 3"; 
} 


//RETURN THE SECTION HEADER FOR EACH SECTION: 
return sectionHeader; 

} 
Смежные вопросы