2013-03-13 1 views
4

Я хочу использовать пользовательский UITableviewCell с UITableView в том же xib, не создавая класс UITableViewCell?Как я могу использовать пользовательские UITableViewCell и UITableView в том же xib

Как вы можете видеть ниже я установить идентификатор для UITableViewCell и использовать его как это:

UITableView and UITableViewCell in same xib

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
    static NSString *CellIdentifier = @"CustomIdentifier"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

} 

Но не работает?

ответ

0

Да, вы можете сделать, как следующий код

Под ViewDidLoad или ViewWillAppear

label1Array=[NSMutableArray arrayWithObjects:@"A",@"B",nil]; 
label2Array=[NSMutableArray arrayWithObjects:@"C",@"D",nil]; 
label3Array=[NSMutableArray arrayWithObjects:@"E",@"F",nil]; 

UITableViewDelegate

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

static NSString *CellIdentifier = @"aCell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) { 
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
UILabel *label1=[[UILabel alloc]init]; 
label1.frame=CGRectMake(0,0,40,40); 
label1.text=[label1Array objectAtIndex:indexPath.row]; 
................ 
[cell.contentView addSubView: label1]; 

UILabel *label2=[[UILabel alloc]init]; 
label2.frame=CGRectMake(50,0,40,40); 
label2.text=[label2Array objectAtIndex:indexPath.row]; 
[cell.contentView addSubView: label2]; 

UILabel *label3=[[UILabel alloc]init]; 
label3.frame=CGRectMake(100,0,40,40); 
label3.text=[label3Array objectAtIndex:indexPath.row]; 
[cell.contentView addSubView: label3]; 
} 

Надеется, что это помогает !!!

+0

Спасибо за повтор, но я хочу использовать визуальный UiTableCell и без создания класса для него в xib, это легко сделать в раскадровке, но я не знаю, как это сделать в xib-файле –

+0

@ArashZeinoddini на самом деле этот код для xib только .. Может у краткого вашего вопроса, я не могу получить то, что проблема ур. – Dany

+0

Знаете, я хочу создать пользовательский UITableViewCell, нормально ?, и нормальный поток для этого - сделать UITableViewCell с его классом, таким как этот учебник: http: //www.altinkonline.nl/tutorials/xcode/uitableview/ uitableviewcell /, нормально ?, но я действительно не хочу создавать пользовательский класс UITableViewCell (.h/.m) и просто хочу сделать UITableViewCell тем же самым, что я создал UITableView, нормально, и, конечно же, я установил идентификатор для использования этого созданный UITableViewCell. –

3

Добавить свойство UITableViewCell * customCell к контроллеру вида (например, файл ShowUsers.h) ...

@property (nonatomic, strong) IBOutlet UITableViewCell *customCell; 

и подключить его к пользовательскому клетке вашего XIb. Затем используйте следующий код в cellForRow (например, файл ShowUsers.m):

if (cell == nil) { 
    [[NSBundle mainBundle] loadNibNamed:@"NibName" owner:self options:nil]; 
    cell = self.customCell; 
    self.customCell = nil; 
} 
+0

Спасибо, но UITableViewCell и UItableView находятся в одном xib –

+0

Вы можете переместить tableviewcell в отдельный xib. – jamihash

+0

это работает совершенно отлично, ноябрь 2013 г. – Fattie

0

See..You может сделать так. Здесь вы добавляете два UITableViewCell в один TableView с помощью XIB.

В Class.h файле: -

Объявить один изменяемый массив для числа ячеек.

 { 
     NSMutableArray * sectionRows; 
     } 

    @property (nonatomic,retain) IBOutlet UITableViewCell *addTvc1; 
    @property (nonatomic,retain) IBOutlet UITableViewCell *addTvc2; 

В Class.m: -

@synthesize addTvc1, addTvc2; 

    - (void)viewDidLoad 
     { 
     [super viewDidLoad]; 

     sectionRows = [[NSMutableArray alloc] init]; 

     [sectionRows addObject:[[NSMutableArray alloc] 
         initWithObjects:addTvc1, nil]]; 

     [sectionRows addObject:[[NSMutableArray alloc] 
         initWithObjects:addTvc2, nil]]; 

    } 

В методе UITableViewDelegate -

Добавить этот -

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    { 
     return [sectionRows count]; 
    } 

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

    - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath: 
                 (NSIndexPath *)indexPath 
    { 
     return [[sectionRows objectAtIndex:indexPath.section] 
           objectAtIndex:indexPath.row]; 
    } 

Наряду с кодом, в капли XIB класса и перетащить два UITableViewCell который должен быть снаружи от представления и добавлять эти ячейки с владельцем файлов. Он будет работать отлично. Здесь не нужно создавать один отдельный пользовательский класс UITableViewCell.

+0

Если у вас есть какие-либо сомнения относительно кода, тогда спросите ...? –

+0

Что чувак? Работает.... –

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