2012-10-25 175 views
15

我已經嘗試搜索一些關於如何填充表格視圖的教程,但是我發現的所有教程都是舊的和過時的視頻。我試着從稍微更新的版本開始,並且它不起作用。我有在iOS中填充Tableview單元格6

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"]; 
    [chemarray addObject:@"2"]; 
    [chemarray addObject:@"test"]; 
    [chemarray addObject:@"3"]; 
    [chemarray addObject:@"science"]; 
} 

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

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"  forIndexPath:indexPath]; 

    cell.textLabel.text = [chemarray objectAtIndex:indexPath.row]; 
    return cell; 
} 

按照本教程中,運行的時候,它應該在我的數組顯示的項目,但對我來說,這不!有誰知道如何解決這一問題?

+0

你是否將視圖控制器設置爲表視圖的委託?它創建單元格還是不創建單元格? –

+0

它不會創建單元格 – Alexyuiop

回答

24

你忘了register筆尖/類的單元標識符。

表格蘋果UITableView文檔:

重要:調用dequeueReusableCellWithIdentifier:forIndexPath: 方法之前,必須先註冊使用 registerNib:forCellReuseIdentifier:registerClass:forCellReuseIdentifier:方法的類或筆尖文件。

下面是一個普通的UITableViewCell一個例子:

- (void) viewDidLoad { 
    [super viewDidLoad]; 

    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"]; 
} 

如果不註冊筆尖/類中的方法dequeueReusableCellWithIdentifier:forIndexPath:是基本上相同dequeueReusableCellWithIdentifier:。它不會自動爲你創建一個實例。

+1

在哪裏以及如何使用這個,並把這個 – Alexyuiop

+0

放在'viewDidLoad' – rckoenes

+0

謝謝,但我怎麼把它放在那裏? – Alexyuiop

1
  1. 將代表設置爲uitableview.delegate = self;
  2. 檢查,如果你有報關協議<UITableViewDelegate, UITableViewDataSource>
  3. ,如果你不使用的故事板,請務必初始化細胞,如果細胞==零

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 
    if (cell == nil) { 
         cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 
    } 
    
+0

因此,調用dequeueReusableCell ....是無用的,因爲您不會「緩存」您創建的單元格? –

3

我遇到了同樣的問題。如果您使用的是iOS6,那麼我假設您正在使用故事板,並將視圖控制器與您的自定義類相關聯。

然後解決方案是進入故事板,轉到tableview中單元格的屬性並將標識符值更改爲「單元格」。沒有必要在ViewDidLoad中註冊該類。

1
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    cell.textLabel.text = [chemarray objectAtIndex:indexPath.row]; 
    return cell; 
} 

請確保您有UITableViewDataSourceUITableViewDelegate.h並連接tableview委託,數據源和.xibcellindentifier細胞。

相關問題