Добавьте изображение и текст заголовка в раздел Three20 Table, используя TTSectionedDataSource - PullRequest
4 голосов
/ 18 февраля 2011

Я пытаюсь создать таблицу, используя TTTableViewController.Я хочу отобразить изображение в заголовке раздела вместе с текстом заголовка, что-то похожее на то, что делает Instagram и многие другие приложения.Я попытался использовать пример из TTNavigatorDemo для отображения данных из TTSectionedDatasource, (я не уверен, что это правильный способ, пожалуйста, предложите какой-нибудь лучший способ, если вы знаете какой-либо).Он содержит название раздела / заголовки в виде обычных строк и данные в виде TTTableViewItem.Я попытался реализовать протокол <UITableViewDelegate> и добился его с помощью метода viewForHeaderInSection, теперь данные отделены от раздела. Есть ли лучший способ, используя Three20 , через который я могу передать свое представление заголовка / раздела и TableItemView вместе с источником данных, поскольку это позволило бы мне реализовать TTTableViewDragRefreshDelegate, который я не смог реализовать при реализации протокола <UITableViewDelegate> в моем классе.

Мое объявление класса прямо сейчас выглядит как-токак

@interface ImageTable : TTTableViewController <UITableViewDelegate> { }

Я хотел бы показать заголовки разделов с изображением и текстом, например:

Instagram:

В настоящее время я использую TTNavigatorCode для заполненияДанные в моей Таблице:

   self.dataSource = [TTSectionedDataSource dataSourceWithObjects:
                               @"Food"
                               [TTTableViewItem itemWithText:@"Porridge" URL:@"tt://food/porridge"],
                               [TTTableTextItem itemWithText:@"Bacon & Eggs" URL:@"tt://food/baconeggs"],
                               [TTTableTextItem itemWithText:@"French Toast" URL:@"tt://food/frenchtoast"],
                               @"Drinks",
                               [TTTableTextItem itemWithText:@"Coffee" URL:@"tt://food/coffee"],
                               [TTTableTextItem itemWithText:@"Orange Juice" URL:@"tt://food/oj"],
                               @"Other",
                               [TTTableTextItem itemWithText:@"Just Desserts" URL:@"tt://menu/4"],
                               [TTTableTextItem itemWithText:@"Complaints" URL:@"tt://about/complaints"],
                               @"Other",
                               [TTTableTextItem itemWithText:@"Just Desserts" URL:@"tt://menu/4"],
                               [TTTableTextItem itemWithText:@"Complaints" URL:@"tt://about/complaints"],
                               nil];

Я смог сделать нечто подобное, реализовав метод:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
  return myCustomView;    
}

Но так как мои данные поступают из класса модели, и я хочуя генерирую представления и добавляю их в источник данных в отформатированном виде.Я хотел бы знать, есть ли способ с использованием Three20, с помощью которого я указываю Массив моих данных для разделов и другой массив для соответствующих данных в разделах?

Ваша помощь высоко ценится

Спасибо

1 Ответ

1 голос
/ 28 ноября 2011

Создать делегат FOOTableDelegate.h

@interface FOOTableDelegate : TTTableViewDragRefreshDelegate 
{

}

- (UIView*) createHeaderView:(FOODataSource *)fDataSource forSectionID:(NSString *)secID;

@end

В файле FOOTableDelegate.m

- (UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
 {
    if (tableView.style == UITableViewStylePlain) 
        {
        if ([tableView.dataSource respondsToSelector:@selector(tableView:titleForHeaderInSection:)]) 
                {
            NSString* title = [tableView.dataSource tableView:tableView titleForHeaderInSection:section];
            if (title.length > 0) 
                        {
                UIView* header = [_headers objectForKey:title];

                if (nil != header)
                                {
                    header.alpha = 1;

                } 
                                else 
                                {
                    if (nil == _headers) 
                                        {
                        _headers = [[NSMutableDictionary alloc] init];
                    }

                    header = [self createHeaderView:tableView.dataSource forSectionID:title];
                    [_headers setObject:header forKey:title];
                }
                return header;
            }
        }
    }
    return nil;
}

- (UIView*) createHeaderView:(FeedDataSource *)fDataSource forSectionID:(NSString *)secID
{

     //do some code for header View

    return View;

}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    //return height for the Section Header
    return height;
}

Это поможет вам решить вашу проблему

...