2010-03-22 29 views
7

Tôi có một UITableViewController được điền với một số dữ liệu. Nếu dữ liệu trở lại trống, rõ ràng là bảng trống. Phương pháp thích hợp để sử dụng để xử lý trường hợp này và đưa ra một cái gì đó giống như một UILabel với "Không có dữ liệu có sẵn".Xử lý rỗng UITableView trong UITableViewController

Tôi đã sử dụng - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section nhưng nó đã được chứng minh một chút rườm rà và tôi không còn tự tin rằng đó là nơi tốt nhất để làm điều này.

Trả lời

1

Tôi chỉ ẩn chế độ xem bảng khi không có dữ liệu thay thế. Đơn giản chỉ cần phân lớp UITableView và ghi đè reloadData. Bạn cũng có thể hiển thị/ẩn nhãn văn bản một cách thích hợp để không hiển thị dữ liệu.

- (void)reloadData { 
    [super reloadData]; 
    BOOL dataPresent = FALSE; 
    int sections = [self.dataSource respondsToSelector:@selector(numberOfSectionsInTableView:)] ? [self.dataSource numberOfSectionsInTableView:self] : 1; 
    for (int i = 0; i < sections; i++) { 
     if ([self.dataSource tableView:self numberOfRowsInSection:i] > 0) { 
      dataPresent = TRUE; 
      break; 
     } 
    } 
    self.hidden = !dataPresent; 
    return; 
} 
5

Tôi có thể đảo ngược triết lý một chút để chỉ hiển thị UITableView khi nội dung có sẵn và có UIView hiển thị hình ảnh sẵn có 'không có nội dung' cho đến khi nội dung sẵn sàng.

Khi nội dung đã được tìm nạp và sẵn sàng để được trình bày - animate hoặc tạo UITableView vào phân cấp khung nhìn trên hình ảnh 'no content' và yêu cầu tải lại dữ liệu của nó. Điều này sẽ làm cho nó bắt đầu làm việc thông qua các callback ủy nhiệm nguồn dữ liệu của nó.

Ít nhất theo cách này, bạn sẽ không phải lo lắng về việc hiển thị một lần xem bảng mà không có dữ liệu và trộn các mối quan tâm với các phương thức gọi lại UITableViewDataSource.

+0

Tôi thích điều đó. Vì vậy, tôi bắt đầu với ứng dụng Navigation Based và kết thúc có một UITableViewController. Vì vậy, nếu tôi ẩn tableView, làm thế nào để tôi thêm những thứ để xem và xem những gì là underneith có? Khi tôi mở InterfaceBuilder, tôi chỉ thấy tableview. Nó làm tôi bối rối. – Ternary

1

Tại sao không chỉ thay đổi thuộc tính backgroundView của UITableView thành điều gì đó phù hợp khi bảng trống? Bạn có thể cập nhật thuộc tính backgroundView bất cứ lúc nào bạn tải hoặc tải lạiData cho tableView của bạn. BackgroundView được tự động kích thước với kích thước của tableView của bạn và bạn có thể tùy chỉnh nó để có bất kỳ hình ảnh, văn bản, điều khiển nào bạn muốn cho trường hợp trống.