2013-07-10 1 views
1

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

Теперь я пишу приложение, подобное «instagram», которое показывает изображение и связанные комментарии. Все эти изображения и комментарии взяты из базы данных, что не важно в моем вопросе.

Итак, пожалуйста, взгляните на мой дизайн. Click me

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

Во-первых, я создаю UITableViewController, затем я увеличиваю ячейку просмотра таблицы на весь вид. И я добавляю UIImageView и табличный вид «на» ячейку, таким образом, это настраиваемая ячейка.

Затем я создаю класс UITableViewCell для реализации этой пользовательской ячейки. Я ищу и обнаружил, что я могу добавить подвид в этом UITableViewCell классе, чтобы показать UIImage в моей пользовательской ячейке, как:

UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(cell.contentView.frame.origin.x,  cell.contentView.frame.size.height, 20, 20)]; 
imageView.image = [UIImage imageNamed:@"Icon.png"]; 
[cell.contentView addSubview:imageView]; 

Но я не могу понять, как добавить UITableView как подвид моей пользовательской ячейки , Скажем, я могу добавить код

[cell.contentView addSubView:tableView] ; 

на мой пользовательский класс клеток, но там, где я могу конфиг содержимое ячейки этого встроенного TableView? Таким образом, этот метод:

-(UITableViewCell *) tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath ; 

Так, может кто-то подскажет, как можно достичь этого? Или есть другой подход, который может достичь цели? Спасибо за помощь.

ответ

2

Я думаю, что вы идете в правильном направлении.

Создайте пользовательскую ячейку таблицы, производную от UITableViewCell, добавьте UIImageView и UITableView в виде содержимого ячейки. Добавьте функции делегата tableview в этот пользовательский класс ячеек. Из основного представления при создании экземпляра этой настраиваемой ячейки также задайте источник данных для вашей таблицы комментариев.

EDIT на основе комментариев

У вас уже есть UITableViewController, который содержит UITableView для отображения изображения вместе с комментариями. Этот класс будет содержать методы делегирования для обработки этого источника данных. Давайте назовем это имя классом ContentViewController.

Вот в этом классе вы будете иметь cellForRowAtIndexPath обрабатывать фактический источник данных следующим образом:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellId= @"CellId"; 
    UITableViewCell *cell = nil; 
    yourDataObj = [yourDataSource objectAtIndex:indexPath.row]; 
    cell = [tableView dequeueReusableCellWithIdentifier:cellId]; 
    if (cell == nil){ 
     cell = [[[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId:yourDataObj]autorelease]; 
    } 
    //Do other cell updations here 
    // yourDataObj is a custom class which conatins an array to hold your comments data. 
} 

Теперь в вашем классе CustomCell, вы будете иметь UIImageView и UITableView. Таким образом, метод init этого класса CustomCell будет выглядеть следующим образом.

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier: (NSString *)reuseIdentifier :(YourDataObj*)cellDisplayData{ 

    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { 

      //You need to alloc and init your imageView and tableView here. 
      self.imageView.image = cellDisplayData.image;// or image url whatever 
      self.commentsTableDataSource = cellDisplayData.comments; //commentsTableDataSource is property holding comments array 

      self.commentsTable.delegate = self; 
      self.commentsTable.dataSource = self; 
      [self.commentsTable reloadData]; 
    } 
} 

Кроме того, в настоящее время в этом классе пользовательских ячеек, вы можете добавить делегат Tableview и использовать commentsTableDataSource в качестве источника данных для комментариев таблицы. Надеюсь, вы получите представление о том, как реализовать.Попробуйте.

Happy Coding !!

+0

Во-первых, спасибо за ответ. Но я не совсем понимаю «С вашего основного представления, когда вы создаете экземпляр этой настраиваемой ячейки, также задайте источник данных для вашей таблицы комментариев», где я должен добавить источник данных и делегат из «внутреннего» табличного представления? –

+0

В вашем пользовательском классе ячейки. Вы можете добавить протокол UITableViewDelegate в свой собственный файл класса .h и внести в него cellForRowAtIndexPath и другие методы делегата. – HRM

+0

Можете ли вы привести мне пример? Это значит, что у меня может быть несколько делегатов tableview и datasource, например cellForRowAtIndexPath, в одном отдельном файле класса .h? –

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

  • Нет связанных вопросов^_^