2012-10-25 5 views
15

Tôi đã thử tìm kiếm một số hướng dẫn về cách điền các lượt xem bảng, nhưng tất cả những gì tôi thấy là các video cũ và lỗi thời. Tôi đã thử làm nó từ một cái gần đây hơn một chút, và nó không hoạt động. Tôi cóPopulating Tableview Cells trong iOS 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; 
} 

theo hướng dẫn này, khi chạy, nó sẽ hiển thị các mục trong mảng của tôi, nhưng đối với tôi, nó không! Có ai biết làm thế nào để sửa lỗi này?

+0

bạn có đặt trình điều khiển chế độ xem làm đại biểu của chế độ xem bảng không? Liệu nó có tạo ra tế bào hay không? –

+0

nó không tạo ra các tế bào – Alexyuiop

Trả lời

24

Bạn quên register nib/lớp cho số nhận dạng ô.

Mẫu Apple UITableView tài liệu:

Chú ý: Bạn phải đăng ký một lớp học hoặc nib tập tin bằng cách sử dụng phương pháp registerNib:forCellReuseIdentifier: hoặc registerClass:forCellReuseIdentifier: trước khi gọi phương thức dequeueReusableCellWithIdentifier:forIndexPath: .

Dưới đây là một ví dụ cho một đồng bằng UITableViewCell:

- (void) viewDidLoad { 
    [super viewDidLoad]; 

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

Nếu bạn không đăng ký nib/lớp phương pháp dequeueReusableCellWithIdentifier:forIndexPath: là cơ bản giống như dequeueReusableCellWithIdentifier:. Và nó sẽ không tự động tạo một thể hiện cho bạn.

+1

ở đâu và làm thế nào để tôi sử dụng điều này và đặt này – Alexyuiop

+0

Đặt trong 'viewDidLoad' – rckoenes

+0

cảm ơn, nhưng làm thế nào để tôi đặt nó trong đó? – Alexyuiop

1
  1. đặt đại biểu thành uitableview.delegate = self;
  2. kiểm tra nếu bạn có trong giao thức khai <UITableViewDelegate, UITableViewDataSource>
  3. nếu bạn không sử dụng các kịch bản hãy chắc chắn để init di động nếu tế bào == nil

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

Vì vậy, gọi dequeueReusableCell .... là vô ích bởi vì bạn không "cache" các tế bào bạn tạo ra? –

3

Tôi gặp phải vấn đề tương tự. Nếu bạn đang sử dụng iOS6, thì tôi cho rằng bạn đang sử dụng bảng phân cảnh và bạn đã liên kết bộ điều khiển chế độ xem với lớp tùy chỉnh của mình.

Giải pháp sau đó là đi vào bảng phân cảnh, đi đến các thuộc tính cho ô trong bảng nhìn của bạn và thay đổi giá trị Mã định danh thành "Ô". Không cần đăng ký lớp trong 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; 
} 

Đảm bảo bạn có UITableViewDataSource, UITableViewDelegate trong .h của bạn và kết nối với các tableview đại biểu, nguồn dữ liệu và cellindentifier di động trong .xib.