2012-07-11 164 views
0

我遇到了與我的應用程序有關的問題,特別是與UITableView及其UITableViewCells。問題出在這裏:我在UIView內創建了一個UITableView,並自定義了UITableViewCell。我已經涉及到兩個控制器:IOS5 - 自定義UITableViewCell不顯示內容

  • ListController.m
  • ListCellController.m

在IB,我聯繫了小區的項目我的頭文件中手動創建IBOutlets單元控制器。

下面是該ListCellController.h/M代碼:

// .h 
@class Item; 

@interface ListCellController : UITableViewCell 
@property (nonatomic, strong) Item *item; 
@property (nonatomic, strong) IBOutlet UILabel *itemName; 
@property (nonatomic, strong) IBOutlet UILabel *dates; 
@property (nonatomic, strong) IBOutlet UILabel *itemId;  
@end 

// .m 

// @synthetize stuff 

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

    self.textLabel.adjustsFontSizeToFitWidth = YES; 
    self.selectionStyle = UITableViewCellSelectionStyleGray; 

    return self; 
} 

- (void)setItem:(Item *)item 
{ 
    _item = item; 

    self.itemName.text = _list.itemName; 
    self.itemId.text = _list.itemId; 
    self.dates.text = [NSString stringWithFormat:@"Du %@ au %@", _list.date, _list.date]; 
} 

而這裏的ListController.h/M代碼:

// .h 
@interface ListController : UIViewController <UITableViewDelegate, UITableViewDataSource> { 
    UITableView *cellList; 
} 
@property (strong, nonatomic) IBOutlet UITableView *cellList; 
@end 

// .m 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [_list count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"List cell"; 
    ListCellController *cell = [cellList dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (!cell) { 
     cell = [[ListCellController alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 
    cell.item = [_items objectAtIndex:indexPath.row]; 
    cell.itemId.text = cell.item.itemId; 
    cell.itemName.text = cell.item.itemName; 
    cell.dates.text = [NSString stringWithFormat:@"From %@ to %@", cell.item.date, cell.item.date]; 
    return cell; 
} 


#pragma mark - Table view delegate 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [cellList deselectRowAtIndexPath:indexPath animated:YES]; 
} 

我的問題是,當我啓動應用程序,我沒有看到我的細胞。沒有內容,沒有錯誤,沒有任何東西,空白單元格。

只要提一下,我也在這裏使用故事板。

有沒有人遇到過這個問題?我怎麼能解決它?

謝謝。

+0

你鏈接的IB委託和數據源?我沒有看到你在代碼中設置委託。 – Eric 2012-07-11 17:40:59

+0

我只在IB中設置dataSource。看來我沒有對代表做任何事情。但是我對IOS開發很陌生,在這種情況下我不知道該鏈接什麼...... – 2012-07-11 17:53:34

+0

無論哪個頭類包含您的tableView Outlet也需要委託集,與數據源的方式相同。 – Eric 2012-07-11 17:57:42

回答

4

如果您有UITableView的自定義單元格,你必須做這樣的事情

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"List cell"; 
    ListCellController *cell = (ListCellController *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"ListCellController" owner:self options:nil]; 
     for (id currentObject in topLevelObjects){ 
      if ([currentObject isKindOfClass:[UITableViewCell class]]){ 
       cell = (ListCellController *) currentObject; 
       break; 
      } 
     } 
    } 

    cell.item = [_items objectAtIndex:indexPath.row]; 
    cell.itemId.text = cell.item.segmentCode; 
    cell.itemName.text = cell.item.hotelName; 
    cell.dates.text = [NSString stringWithFormat:@"Du %@ au %@", cell.item.checkin, cell.item.checkout]; 
    return cell; 
} 
+0

這是IOS5和故事板的工作嗎? – 2012-07-11 20:13:42

+0

@tsabz - 是否正在與故事板一起工作?你必須在提問中提到,因爲如果你是這樣的話,出列將總是返回一個單元格,並且你的所有單元格都將使用initWithCoder進行初始化。 – jrturton 2012-07-12 07:47:32

+0

是的,我正在使用故事板,我將在第一篇文章中指定它。 – 2012-07-12 07:48:30

相關問題