2010-04-10 30 views
12

Tôi đang cố gắng tùy chỉnh UITableView. Cho đến nay, nó có vẻ tốt. Nhưng khi tôi sử dụng một tùy chỉnh UITableViewCell sub-class, tôi không nhận được các tế bào bảng trống khi chỉ có 3 ô:Hiển thị trống UITableViewCells trong tùy chỉnh UITableView

alt text http://img193.imageshack.us/img193/2450/picture1zh.png

Sử dụng mặc định phong cách TableView tôi có thể nhận được hàng trống lặp đi lặp lại để điền vào quan điểm (ví dụ, ứng dụng thư có điều này). Tôi cố gắng để thiết lập một mô hình backgroundColor trên UITableView đến nền gạch giống nhau:

UIColor *color = [UIColor colorWithPatternImage:[UIImage imageNamed:@"score-cell-bg.png"]]; 
moneyTableView.backgroundColor = color; 

... nhưng ngói bắt đầu một chút trước khi hàng đầu của TableView, vì vậy ngói tắt một lần các tế bào thực tế của được thực hiện hiển thị:

alt text http://img707.imageshack.us/img707/8445/picture2jyo.png

Làm thế nào tôi có thể tùy chỉnh tableview của tôi nhưng vẫn giữ các hàng trống nếu có hàng ít hơn điền vào một trang?

+1

+1 Đây là câu hỏi hay được trình bày tốt. Tôi muốn tất cả mọi người, bao gồm cả bản thân mình, đã dành nhiều thời gian để soạn một câu hỏi hay. – TechZen

+0

Tôi đã cố gắng để xây dựng cùng một câu hỏi và tìm thấy hai cách tiếp cận khác nhau. Là một tham chiếu cho những người đến đây từ google, kiểm tra [câu trả lời này] (http://stackoverflow.com/questions/14520185/ios-uitableview-displaying-empty-cells-at-the-end) sử dụng một tùy chỉnh footer view. –

Trả lời

9

Bạn có vô tình xóa màu nền và kiểu dấu phân cách không? Nếu bạn đã làm, đó có thể là lý do tại sao không có thêm các tế bào. Tôi nghĩ rằng UITableView mặc định không thêm nhiều tế bào thực sự, nó chỉ có kiểu phân cách để tạo ảo ảnh đó và bởi vì nó có nền trắng, chúng trông giống như các ô.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 
} 

Nếu đó không phải là trường hợp, bạn luôn có thể thử thêm các tế bào bổ sung mà không thể được chọn:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return ([source count] <= 7) ? 7 : [source count]; 
} 

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    // Set all labels to be blank 
    if([source count] <= 7 && indexPath.row > [source count]) { 
     cell.textLabel.text = @""; 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    } else { 
     cell.textLabel.text = [source objectAtIndex:indexPath.row]; 
     cell.selectionStyle = UITableViewCellSelectionStyleBlue; 
    } 

    return cell; 
} 
+0

"nó chỉ có phong cách phân cách để tạo ra ảo tưởng đó" Bạn hoàn toàn đúng. Vì vậy, tôi nghĩ rằng tôi sẽ chỉ thêm dấu phân cách và tạo hình nền cho hai cột màu thay vì có dấu phân tách * trong * hình nền ... typeoneerror

+0

Đẹp, hoạt động khá tốt! Vẫn còn một chút tinh chỉnh để làm. http://img517.imageshack.us/img517/5091/picture3lt.png – typeoneerror

+1

không nên 'if ([tổng số nguồn] <= 7 && indexPath.row> [số đếm]) {' be 'if ([đếm nguồn ] <= 7 && indexPath.row> ([số đếm] - 1)) {'khi đường dẫn chỉ số bắt đầu từ 0 trong khi số đếm bắt đầu từ 1 – Alex

0

Tôi tin rằng không thẳng hàng nhẹ hàng đầu là do bị trả lại cuộn dọc của tableview. Nếu bạn tắt tính năng này, hàng trên cùng sẽ được căn chỉnh chính xác.

Ngoài ra, bạn chỉ có thể trả về chiều cao ô sẽ bao quanh ô trong tableview:cellHeightForRow:. Điều đó hoạt động trên các ô mặc định độc đáo.

Các vấn đề liên quan