2015-12-09 5 views
1

Так у меня есть пользовательские UITableViewCell:пользовательских UITableViewCell без dequeueReusableCellWithIdentifier

TestTableViewCell.h

#import <UIKit/UIKit.h> 

@interface TestTableViewCell : UITableViewCell 

@property (strong, nonatomic) IBOutlet UILabel *testCellLabel; 

@end 

TestTabelViewCell.m

#import "TestTableViewCell.h" 

@implementation TestTableViewCell 

-(id)initWithCoder:(NSCoder *)aDecoder { 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     _testCellLabel = [[UILabel alloc] init]; 
    } 

    return self; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state 
} 

@end 

А то у меня контроллер с видом который использует пользовательскую ячейку вида таблицы. Однако эта проблема заключается в том, что я не хочу использовать dequeueReusableCellWithIdentifier в cellForRowAtIndexPath. Вместо этого я хочу иметь массив ячеек.

ViewController.h

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> 

@end 

ViewController.m

#import "ViewController.h" 
#import "TestTableViewCell.h" 

@interface ViewController() 

@property (weak, nonatomic) IBOutlet UITableView *tableView; 
@property (strong, nonatomic) NSArray *myTableViewCells; 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (NSArray *)myTableViewCells { 
    TestTableViewCell *cell1 = [[TestTableViewCell alloc] init]; 
    cell1.testCellLabel.text = @"one"; 
    cell1.backgroundColor = [UIColor blueColor]; 

    TestTableViewCell *cell2 = [[TestTableViewCell alloc] init]; 
    cell2.testCellLabel.text = @"two"; 
    cell1.backgroundColor = [UIColor greenColor]; 

    if (!_myTableViewCells) { 
     _myTableViewCells = @[cell1, cell2]; 
    } 

    return _myTableViewCells; 
} 

#pragma mark - UITableView delegate functions 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return self.myTableViewCells.count; 
} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    TestTableViewCell *cell = self.myTableViewCells[indexPath.row]; 
    return cell; 
} 

@end 

Проблема заключается в том, что нет testCellLabel появляться в табличной ячейке. Я знаю, что у меня есть ячейки, потому что я установил их цвет фона.

После разговора с несколькими людьми, по-видимому, мне нужно выполнить какую-то загрузку из XIB или NIB для правильного загрузки пользовательского интерфейса? Хотя метка определена в ячейке в раскадровке.

Я знаю, что это идет вразрез с нормой, и что компания Apple действительно хочет вас использовать dequeueReusableCellWithIdentifier, но я знаю, что это не будет работать в ситуации, мне нужно это. Я сделал чтение на этом много так пожалуйста не просто скажите мне использовать его. Этот пример кода очень простой, например, ради и простота использования.

Любая помощь была бы принята с благодарностью.

+0

где вы называете этот метод myTableViewCells? –

+0

Я ** ** расскажу вам просто использовать 'dequeueReusableCellWithIdentifier:'.Я сомневаюсь, что у вас есть сценарий, где это не сработает. У вас ** будут проблемы с UITableView, жалующиеся на то, что вы не получили ячейку из 'dequeueReusableCellWithIdentifier:'. – jcaron

+0

Почему нельзя использовать 'dequeueReusableCellWithIdentifier'? Я не могу в это поверить! –

ответ

2
TestTableViewCell *cell1 = [[TestTableViewCell alloc] init]; 

Создает новый объект TestTableViewCell и не создать его экземпляр из раскадровки, как вы думаете, что он делает. Поэтому все созданные магазины будут нулевыми и просто не появятся. Тот факт, что вы можете установить цвет фона, не свидетельствует о том, что ваша реализация работает.

Вы: Необходимо использовать dequeueReusableCellWithIdentifier. Вы говорите, что это не работает для вашей проблемы. Покажите мне, как это не работает, и я скажу вам, почему вы ошибаетесь.

Редактировать

Я вижу в ваших комментариях вы говорите, ваша клетка нуждается в индивидуальном сеттера. Ну, когда вы используете dequeueReusableCellWithIdentifier, вы можете выполнить всю работу по настройке в awakeFromNib (если используется файл xib) ИЛИ initWithCoder, если вы используете раскадровку.

0

Вы можете создать ячейку без dequeueResableCellWithIdentifer.

[[UITableViewCell alloc]initWithStyle:<#UITableCellStyle#> resueIdentifier:<#(nullable *NSString)#>] 
Смежные вопросы