Iphone UITableViewCell Customazitaion - PullRequest
       1

Iphone UITableViewCell Customazitaion

1 голос
/ 09 июля 2011

У меня есть контроллер UInavigation, UITabelView с настроенными UITableViewCells, для которого я создам 4 различных файла xib для этих пользовательских ячеек, которые я получу от них от пользователя.

Я немного запутался, этоГоворят, что каждое представление должно иметь свой собственный контроллер в Iphone, поэтому я помещу новый подкласс UItableviewcontroller в стек для каждой страницы (UITableView), и теоретически он должен отвечать за делегирование uicomponents в этой таблице.Но каждый UItableVIew состоит из настроенных ячеек (xibs),

. Итак, мне также нужен отдельный контроллер для каждой настраиваемой ячейки?

- Если так, где я могу разместить методы делегирования этихкомпоненты пользовательского интерфейса в пользовательских ячейках?

- это правильная иерархия?

UINavigationController -> UITableViewControllersSubclasses -> customUITableViewCellcontrollers

Ответы [ 2 ]

1 голос
/ 09 июля 2011

Нет.Вы не нуждаетесь в отдельном контроллере для каждой настроенной ячейки.

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

Этоне правда.На самом деле контроллер представления обычно управляет иерархией представления , а не видом.Хотя контроллер представления связан с представлением, это представление является лишь корнем всей иерархии представления содержимого экрана (в приложениях iPhone).

Из Руководство по программированию контроллера представления для iOS :

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

0 голосов
/ 09 июля 2011

Насколько я помню, вы пытаетесь построить форму вопроса. Ваш дизайн может выглядеть так.

Ваша страница будет UITableViewController, который содержит, скажем, два разных типа ячеек. Ячейка A и ячейка B. B / c вы хотите иметь различное поведение и дизайн этих двух ячеек, для которых вы хотите создать подкласс UITableCellView как для ячейки A, так и для ячейки B. В этих подклассах вы будете обрабатывать поведение ячейки. С другой стороны, ваш UITableViewController будет управлять всеми ячейками вместе.

Так вот как это сделать.

Шаг первый

Сначала давайте создадим пользовательскую ячейку A (подкласс UITableViewCell)

// CustomCellA.h

#import <UIKit/UIKit.h>

@interface CustomCellA : UITableViewCell {
    UILabel *name;
    NSArray *dataSource
    int value;
}
@property(nonatomic,retain)IBOutlet UILabel *name;
@property(nonatomic,retain)NSArray *dataSource;
@property(nonatomic,readwrite)int value;

@end

// CustomCellA.m

#import "CustomCellA.h"

@implementation CustomCellA

@synthesize name;
@synthesize dataSource;
@synthesize type;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        name       = [[UILabel alloc]init];
        datasource = [NSArray alloc] init];
        value      = -1;
    }
    return self;
}

- (void)dealloc
{
    [name release];
    [dataSource release];
    [super dealloc];
}

@end

Редактировать содержимое файла CustomCellA.xib.

  • Изменить класс ячеек на CustomCellA.
  • Дать идентификатор ячейки "CustomCellA"

Шаг второй

Создание ячейки B точно так же, как ячейка A выше

Шаг третий

Теперь в вашем UITableViewController вы можете использовать свою ячейку

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


    //Use your dataSource example an NSArray field with questions as NSDictionary:
    NSDictionary*question = [questions objectAtIndex:indexPath.row];
    int questionType = [question integerForKey:@"type"];

    if(questionType == 0){//cell A

       static NSString *CellIdentifier = @"CustomCellA";
       static NSString *CellNib = @"CustomCellA";

       UserCustomTableCell *cell = (CustomCellA *)[table dequeueReusableCellWithIdentifier:CellIdentifier];
       if (cell == nil) {
           NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellNib owner:self options:nil];
           cell = (CustomCellA *)[nib objectAtIndex:0];
       }

       // setup your cell

    }else{
        //Do the same for cell B
    }

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