2012-01-04 25 views
8

Tôi có một UITableView nơi tôi muốn buộc làm mới chỉ một hàng tiêu đề phần cụ thể, không phải hàng dữ liệu. Ví dụ: làm mới tiêu đề cho phần 3. Tôi biết cách tải lại toàn bộ phần (tiêu đề cộng dữ liệu), nhưng chỉ có thể làm mới tiêu đề phần?Có cách nào để buộc làm mới chỉ một tiêu đề duy nhất trong UITableView không?

EDIT: Khi dữ liệu thay đổi trong một phần của bảng, tôi muốn cập nhật thông tin trong tiêu đề của phần KHÁC. Vì vậy, tôi cần phải có được một tham chiếu đến phần tiêu đề và sau đó làm mới nó.

+0

u có thể kiểm tra rắc rối anh chàng này http://stackoverflow.com/questions/31692692/what-could- chúng tôi làm như thế nào trong trường hợp tùy chỉnh-cell-in-viewforheaderinsection-to-reload-part? noredirect = 1 # comment51326939_31692692 –

Trả lời

11

Nếu tiêu đề là tùy chỉnh UIView, thì bạn chỉ có thể gọi setNeedsDisplay trên UIView thay vì trên UITableView.

+0

Làm thế nào để bạn có được một tham chiếu đến phần tiêu đề tùy chỉnh UIView để gọi setNeedsDisplay? Tôi biết làm thế nào để có được một tham chiếu đến một hàng cụ thể, nhưng không phải là tiêu đề. – ChrisP

+0

Tôi tin rằng bạn có thể làm điều này ngay cả khi tiêu đề không phải là "tùy chỉnh" 'UIView' vì không phải tất cả các trường hợp tiêu đề của' UIView's –

+2

1: duy trì chế độ xem tiêu đề bạn đã tạo trong một mảng HOẶC 2: iterate thông qua các bản xem trước UITableView cho đến khi bạn tìm thấy tiêu đề với view.tag mong muốn – NSIntegerMax

1

UITableView không * không có bất kỳ phương pháp như vậy để tải lại chỉ xem tiêu đề/tiêu đề ... Bạn phải tải lại toàn bộ phần hoặc bảng.

+0

u có thể kiểm tra vấn đề này dude http://stackoverflow.com/questions/31692692/what-could-we-do -in-case-of-custom-cell-in-viewforheaderinsection-to-reload-part? noredirect = 1 # comment51326939_31692692 –

-3

Tôi cầu xin sự khác biệt. Tôi đã chạy vào trong khi điều này xóa hàng với phần tùy chỉnh tiêu đề và (ít nhất là trong iOS 6) bạn chỉ có thể gọi:

[self tableView:self.tableView viewForHeaderInSection:[indexPath section]]; 

Và chừng nào bạn có mã thích hợp để trở lại một cái nhìn trong phương pháp đó, bạn có thể dễ dàng làm mới tiêu đề cho một phần cụ thể:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 

    if ([self tableView:tableView numberOfRowsInSection:section] == 0) { 

     return nil; //hide the header if there are no rows... 

    } else { 
     // configure or refresh the header... 
    } 
} 
+0

Bạn có biết nếu một cái gì đó như thế này là có thể trong UICollectionViews? – NullHypothesis

+0

Đây là câu trả lời đúng và phải được chấp nhận như vậy. – DJSK

+0

bạn có thể kiểm tra sự cố này dude http://stackoverflow.com/questions/31692692/what-could-we-do-in-case-of-custom-cell-in-viewforheaderinsection-to-reload-part?noredirect=1 # comment51326939_31692692 –

4

Vâng, trong trường hợp của tôi, sau một số tác vụ không đồng bộ, tôi cần cập nhật chế độ xem tiêu đề mục tùy chỉnh của mình.

và tôi nhận được nó để cập nhật nó là chiều cao sử dụng: này Swift 3+ Mã

//to reload your cell data 
self.tableView.reloadData() 
DispatchQueue.main.async { 
// this is needed to update a specific tableview's headerview layout on main queue otherwise it's won't update perfectly cause reloaddata() is called 
    self.tableView.beginUpdates() 
    self.tableView.endUpdates() 
}   
+0

Tôi không biết tại sao reloadData() không làm mới tiêu đề phần, và nó có thể là một lỗi, nhưng 'beginUpdates() endUpdates()' cũng làm việc cho tôi. –

+0

bạn biết đấy, đó là iOS: v –

+0

Điều này đã giúp tôi, đã gặp sự cố với phần chân cuối cùng biến mất sau khi reloadData – Dan

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