2013-06-11 2 views
0

У меня есть пользовательская ячейка таблицы, и я просто пытаюсь установить ярлык, изображение и т. Д., Но по какой-то причине он не работает.Установить ярлык для пользовательской ячейки

Вот мой код для моего пользовательского ячейки

BrowserMenuCell.h

#import <UIKit/UIKit.h> 

@interface BrowseMenuCell : UITableViewCell 
@property (strong, nonatomic) IBOutlet UIButton *wishListBUtton; 
@property (strong, nonatomic) IBOutlet UIImageView *itemImage; 
@property (strong, nonatomic) IBOutlet UILabel *itemLabel; 
@property (strong, nonatomic) IBOutlet UILabel *itemPrice; 
@property (strong, nonatomic) IBOutlet UITextField *quantityField; 
@property (strong, nonatomic) IBOutlet UILabel *totalLabel; 
- (IBAction)plusButton:(id)sender; 
- (IBAction)cartButton:(id)sender; 
- (IBAction)minusButton:(id)sender; 
@end 

BrowserMenuCell.m

#import "BrowseMenuCell.h" 

@implementation BrowseMenuCell 

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
{ 
    [super setSelected:selected animated:animated]; 
    // Configure the view for the selected state 
} 

- (IBAction)plusButton:(id)sender { 
} 

- (IBAction)cartButton:(id)sender { 
} 

- (IBAction)minusButton:(id)sender { 
} 
@end 

Cell для строки с индексом пути

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

    BrowseMenuCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ItemsCell"]; 
    OfficeSupply *supply = [_items objectAtIndex:indexPath.row]; 

    if(cell == nil) 
    { 
     NSArray * views = [[NSBundle mainBundle] loadNibNamed:@"BrowseMenuCell" owner:nil options:nil]; 

     for (id obj in views){ 
      if([obj isKindOfClass:[UITableViewCell class]]) 
      { 
       BrowseMenuCell * obj = [[BrowseMenuCell alloc]init]; 
       obj.itemLabel.text = supply.itemName; 
       cell = obj; 
       break; 
      } 
     } 
    } 


    return cell; 
} 
+0

Удалить эту строку: BrowseMenuCell * obj = [[BrowseMenuCell alloc] init]; и попробуйте еще раз – Wain

+0

Тогда я не могу установить itemLabel.text – Claud

+0

Как я исправил это было просто UILabel * name = (UILabel *) [cell viewWithTag: 6]; но не знаю, правильно ли это. – Claud

ответ

0

Для начать с, d не создавайте новый случайный экземпляр ячейки после того, как вы уже создали ее из файла NIB. Измените код следующим образом:

for (BrowseMenuCell *obj in views){ 
     if([obj isKindOfClass:[BrowseMenuCell class]]) 
     { 
      obj.reuseIdentifier = @"ItemsCell"; 
      obj.itemLabel.text = supply.itemName; 
      cell = obj; 
      break; 
     } 
    } 

Это не гарантирует его работу, но, по крайней мере, установка NIB ваших этикеток не будет получать выброшена.

Если он все еще не работает. Отлаживать. Проверьте рамки ярлыков. Проверьте, что ссылки на ярлыки установлены (не ноль).

+0

Да, это не работает, я просто использовал тег для каждого элемента. – Claud

+0

Указывает, что ссылки на свойства XIB неверно (или, возможно, нет) связаны. – Wain

0

Вы пытались использовать [self.tableView reloadData]?

+0

Моя таблица загружается, это просто, что метка не установлена. – Claud

0

Это неправильный способ создания ячейки. Попробуйте следующее:

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

    BrowseMenuCell *cell = (BrowseMenuCell*)[tableView dequeueReusableCellWithIdentifier:@"ItemsCell"]; 
    OfficeSupply *supply = [_items objectAtIndex:indexPath.row]; 
    if (_cellObj == nil) { 
     [[NSBundle mainBundle] loadNibNamed:@"BrowseMenuCell" owner:nil options:nil]; 
    } 

    cell.itemlabel.text = supply.itemName; 

    return cell; 
} 
Смежные вопросы