ios шаги для создания пользовательского UITableViewCell с файлом XIB - PullRequest
25 голосов
/ 07 февраля 2011

Мне нужно создать свой собственный UITableViewCell, используя файл xib, нарисовать графический интерфейс ... Каковы правильные шаги для создания моего нового класса и использования в моем UITableView?1003 *

Ответы [ 6 ]

15 голосов
/ 02 августа 2012

В iOS5 вы захотите использовать новое:

registerNib:forCellReuseIdentifier:

Что в основном делает то же самое ...

10 голосов
/ 13 июня 2012

Лично я думаю, что оба предложенных урока имеют большой недостаток, когда дело доходит до reuseIdentifier.Если вы забыли назначить его в конструкторе интерфейсов или неправильно написали его, вы будете загружать перо каждый раз, когда вызывается cellForRowAtIndexPath.

Джефф Ламарч пишет об этом и как исправить это в этом блоге почта .Помимо reuseIdentifier он использует тот же подход, что и в документации Apple для Загрузка пользовательских ячеек табличного представления из файлов пера .

Прочитав все эти статьи, я пришел к следующему коду:

Редактировать: если вы ориентируетесь на iOS 5.0 и выше, вам нужно придерживаться Duane Fields'answer

@interface CustomCellWithXib : UITableViewCell

+ (NSString *)reuseIdentifier;
- (id)initWithOwner:(id)owner;

@end

@implementation CustomCellWithXib

+ (UINib*)nib
{
    // singleton implementation to get a UINib object
    static dispatch_once_t pred = 0;
    __strong static UINib* _sharedNibObject = nil;
    dispatch_once(&pred, ^{
        _sharedNibObject = [UINib nibWithNibName:NSStringFromClass([self class]) bundle:nil];
    });
    return _sharedNibObject;
}

- (NSString *)reuseIdentifier
{
    return [[self class] reuseIdentifier];
}

+ (NSString *)reuseIdentifier
{
    // return any identifier you like, in this case the class name
    return NSStringFromClass([self class]);
}

- (id)initWithOwner:(id)owner
{
    return [[[[self class] nib] instantiateWithOwner:owner options:nil] objectAtIndex:0];
}

@end

UINib (доступный в iOS 4.0 и более поздних версиях) используется здесь как одиночный, потому что, хотя используется reuseIdentifier, ячейка все еще переинициализируется относительно10 раз или около того.Теперь cellForRowAtIndexPath выглядит так:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomCellWithXib *cell = [tableView dequeueReusableCellWithIdentifier:[CustomCellWithXib reuseIdentifier]];
    if (cell == nil) {
        cell = [[CustomCellWithXib alloc] initWithOwner:self];
    }

    // do additional cell configuration

    return cell;
}
6 голосов
/ 09 мая 2012

A видеоурок , показывающий, как это сделать с Xcode 4.2, уже сделано.Автор написал также сообщение в блоге .

1 голос
/ 23 апреля 2015

`Вы можете создавать собственные ячейки в табличном представлении с помощью файла .xib. Сначала настройте табличное представление в вашем контроллере представления, создайте новый xib-файл с его классом и используйте его в табличном представлении.

- (IBAction)moveToSubCategory:(id)sender;
@property (strong, nonatomic) IBOutlet UILabel *foodCategoryLabel;
@property (strong, nonatomic) IBOutlet UIImageView *cellBg;



-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [foodCatArray count];
}



-(UITableViewCell *)tableView:(UITableView *)tableView     cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *simpleTableIdentifier = @"ExampleCell";
        ExampleCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
       if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ExampleCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
     }   
    [cell setTag:indexPath.row];
    cell.cellBg.image=[UIImage imageNamed:[photoArray objectAtIndex:indexPath.row]];
    cell.foodCategoryLabel.text=[foodCatArray objectAtIndex:indexPath.row];
    return cell;

}
1 голос
/ 08 июля 2013

Из этого туториала Вы узнаете все современное решение iOS 5, от процесса создания файлов xib и классов ячейки до самого конца:

http://mrmaksimize.com/ios/Custom-UITableViewCell-With-NIB/

0 голосов
/ 23 января 2013

Вы можете создать класс CustomCell с XIB, который унаследован от UITableViewCell.Мы просто добавим категорию в .m файл класса tableview следующим образом.Я думаю, что это самый простой метод, который можно применять для создания пользовательских ячеек.


    @interface UITableViewCell(NIB)
    @property(nonatomic,readwrite,copy) NSString *reuseIdentifier;
    @end
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return 30;
    }

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    static NSString *identifier=@"cell";
        CustomCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier];
        if(cell==nil)
        {
             NSLog(@"New Cell");
            NSArray *nib=[[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
            cell=[nib objectAtIndex:0];
            cell.reuseIdentifier=identifier;

        }else{
            NSLog(@"Reuse Cell");
        }
        cell.lbltitle.text=[NSString stringWithFormat:@"Level %d",indexPath.row];
        id num=[_arrslidervalues objectAtIndex:indexPath.row];
        cell.slider.value=[num floatValue];
        return cell;
    }
    @end

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