2011-10-23 47 views
11

Muốn tạo một menu tĩnh (IOS 5) và cố gắng tạo các ô tùy chỉnh trong bảng phân cảnh để sau đó tải lên bảng phân nhóm.Tạo tùy chỉnh UITableViewCell trong một Storyboard

Tôi đã tạo ổ cắm

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

Lớp ViewController được thiết lập để các TableViewController thích hợp và tôi đã kết nối các tế bào tùy chỉnh để cửa hàng này.

Tôi cũng đã thiết lập ủy quyền và nguồn dữ liệu.

Tôi đã có

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return self.labelCell; 
} 

tôi chắc chắn rằng có một tấn sai với điều này, nhưng tôi chỉ cố gắng để hiển thị một tế bào và đi từ đó. Dường như không có bất kỳ ví dụ nào về việc thực hiện các ô tùy chỉnh trong IB thông qua bảng phân cảnh. Tôi vẫn có thể sử dụng cách cũ của việc tạo ra một tập tin xib và tải nó trong mainBundle nhưng tôi chỉ muốn ở lại đến ngày tôi đoán.

nhưng với những gì tôi có ở trên, tôi gặp sự cố khi tôi tải bộ điều khiển chế độ xem này. SIGABRT

Trả lời

13

Nếu bạn đã đặt UITableView để sử dụng 'Ô tĩnh' trong bảng phân cảnh, bạn không cần triển khai bất kỳ phương thức nào trong số UITableViewDataSource và bạn có thể sửa đổi ô trực tiếp trong Trình tạo giao diện. Đối với một ô nhãn đơn, hãy chọn ô và thay đổi loại thành 'Cơ bản'. Bây giờ bạn có thể chỉnh sửa ô giống như bất kỳ đối tượng xem nào khác.

+1

Yep. Đó là về nó.Không chắc chắn tại sao tôi không tìm thấy bất kỳ hướng dẫn nào ở tất cả đã nói với bạn để làm điều này. Làm cho nó dễ dàng hơn nhiều. – Doug

+1

Như một câu hỏi ngẫu nhiên, việc sử dụng các ô tĩnh có ngụ ý rằng bạn có chính xác số lượng ô mà bạn chỉ định trong IB không? Vì bạn không phải thực hiện các phương pháp nguồn dữ liệu, tôi cho rằng bạn không thể thay đổi dữ liệu trong chế độ xem bảng của bạn và đó là lý do tại sao chúng được gọi là tĩnh - phải không? – Warkst

+0

@Warkst - chính xác. Trong thực tế, bạn nên loại bỏ việc triển khai sơ khai của các phương thức nguồn dữ liệu. – jrturton

27

Dưới đây là những gì tôi đã tìm hiểu về cách bạn lấy ô cho bảng của mình khi sử dụng bảng phân cảnh. Khi bạn kéo một UITableView vào khung nhìn của bạn, nó đi kèm với một ô mẫu đã được thiết lập như một khung nhìn con. Để sử dụng ô mẫu thử nghiệm này, hãy đặt một định danh tái sử dụng duy nhất trong trình kiểm tra thuộc tính, và sau đó sử dụng cùng một định danh để dequeue ô trong phương thức cellForRowAtIndexPath: của bạn. Tôi để lại mã để tạo một ô từ đầu nếu cuộc gọi dequeue trả về nil; Tôi không nghĩ nó có thể xảy ra. Vì vậy, chỉ dequeue các tế bào, cấu hình nó với các phương pháp UITableViewCell thông thường, và trả lại nó.

Nhưng bạn cũng có thể tạo các lớp con tùy chỉnh của UITableViewCell. Chỉ cần đặt tên lớp trong trình kiểm tra nhận dạng lớp của bảng phân cảnh và kéo bất kỳ phần tử nào bạn muốn từ bảng đối tượng vào ô của bạn. Sau đó tạo các thuộc tính IBOutlet cho chúng trong các tệp mã của lớp con của bạn và nối chúng vào ô trong bảng phân cảnh theo cách thông thường. Điều này tốt hơn rất nhiều so với việc phải làm tất cả trong mã!

Và cuối cùng, bạn có thể có nhiều loại ô trong bảng. Chỉ cần kéo các đối tượng UITableViewCell từ bảng màu vào bảng và cung cấp cho mỗi một mã định danh tái sử dụng duy nhất trong trình kiểm tra thuộc tính. Trong phương thức cellForRowAtIndexPath:, hãy chọn kiểu của mỗi ô và bạn có thể có một khung nhìn bảng rất linh hoạt.

+1

Điều này hoàn toàn đúng, nhưng câu hỏi là về các khung nhìn bảng tĩnh, không sử dụng nguyên mẫu. – jrturton

+0

Tôi có một kịch bản mới (nghi ngờ). Nếu tôi có 'UITableView' với ô tùy chỉnh chứa các nút' + ',' -' và 'UITextField'. tất cả các thiết lập được thực hiện theo đoạn của bạn # 2 đã nhưng bây giờ nếu tôi muốn ngăn chặn các tế bào của tôi được tái sử dụng là có cách nào tốt để làm điều đó? tôi có nên làm thế không? (Tôi muốn chức năng thêm nhiều hơn một ID email) – thesummersign

+0

@jrturton Ah, nhưng một số đến đây từ một tìm kiếm của Google, mà không nhận ra phần "tĩnh". Tiêu đề là một chút sai lầm. Vì vậy, * câu trả lời * này thực sự là những gì * tôi * đang tìm kiếm. –

4

This hướng dẫn hữu ích cho tôi. Bạn có thể tham chiếu bất kỳ đối tượng nào bạn cần thông qua thẻ.

Trong kéo bảng phân cảnh trên UIImageView hoặc UILabel v.v ... và đặt thẻ thành 100 (bất kỳ thứ gì bạn muốn), sau đó, hãy sử dụng thẻ để tham chiếu thẻ đó - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath.

Đây là đoạn mã ví dụ trong hướng dẫn, chỉ cần nhớ để thiết lập các thẻ trong kịch bản:

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

// Configure the cell... 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 

// Display recipe in the table cell 
Recipe *recipe = [recipes objectAtIndex:indexPath.row]; 
UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100]; 
recipeImageView.image = [UIImage imageNamed:recipe.imageFile]; 

UILabel *recipeNameLabel = (UILabel *)[cell viewWithTag:101]; 
recipeNameLabel.text = recipe.name; 

UILabel *recipeDetailLabel = (UILabel *)[cell viewWithTag:102]; 
recipeDetailLabel.text = recipe.detail; 

return cell; 
} 
Các vấn đề liên quan