Tôi đang sử dụng lại tiêu đề, giữ chúng trong từ điển trong đó số phần là khóa và chế độ xem tiêu đề là giá trị.Khung hình của chế độ xem tiêu đề đã thay đổi vĩnh viễn sau khi xóa phần UITableView của
Sau khi tôi đã xóa hoạt ảnh một phần và tải lại một phần khác, chế độ xem tiêu đề của chỉ những phần này "biến mất". Sau khi tìm kiếm một số, tôi thấy rằng khung của chế độ xem tiêu đề đã được thay đổi. Frame.X
chế độ xem tiêu đề từ phần đã bị xóa với UITableViewRowAnimationRight
shifter sang phải theo chiều rộng màn hình (320) và hình đã được tải lại với UITableViewRowAnimationAutomatic
được chuyển bởi Y
.
Vấn đề chính và sự nhầm lẫn xuất phát từ thực tế là tôi không thể thay đổi các khung này! Vâng, họ thay đổi lúc đầu, nhưng không có gì thay đổi trực quan và trên các cuộc gọi khác của viewForHeaderInSection:
khung hình được chuyển một lần nữa.
Sau đây là cách tôi làm điều đó:
Giả sử chúng ta có 3 phần, với dữ liệu của mỗi đặt tại một trong những mảng _first
, _second
và _third
. Và bằng nút bấm của touchupinside chúng tôi gọi handleTouchUp:
. (_second
vẫn không thay đổi)
- (void) handleTouchUp: (UIButton *)sender
{
if ([_first count] == 0) {
sectionCount = 3;
_first = [NSMutableArray arrayWithObjects: @"First 1", @"First 2", nil];
_third = [NSMutableArray arrayWithObjects: @"Third 1", @"Third 2", @"Third 3", @"Third 4", @"Third 5", nil];
[tableView reloadData];
} else {
sectionCount = 2;
[_first removeAllObjects];
_third = [NSMutableArray arrayWithObjects: @"First 1", @"First 2", @"Third 1", @"Third 2",
@"Third 3", @"Third 4", @"Third 5", nil];
[tableView beginUpdates];
[tableView deleteSections: [NSIndexSet indexSetWithIndex: 0] withRowAnimation:UITableViewRowAnimationRight];
[tableView reloadSections: [NSIndexSet indexSetWithIndex: 2] withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView endUpdates];
}
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
NSNumber *key = [NSNumber numberWithInteger: section];
UIView *header = [_headers objectForKey: key];
if (header) {
} else {
header = [[UIView alloc] init];
switch (section) {
//Doing something with header here (e.g. set background color)
}
[_headers setObject:header forKey: key];
}
[header setFrame: CGRectMake(0, 0, 320, 25)];
return header;
}
Here is full code of ViewController.m và test project
UPDATE: Có thể có một số lỗi khác trong dự án, nhưng nó không quan trọng - đó là dự án thử nghiệm. Vấn đề quan trọng duy nhất là lượt xem tiêu đề không hợp lệ. Việc xóa chế độ xem không hợp lệ và tạo chế độ xem mới không phải là giải pháp - nó sẽ giết chết điểm sử dụng lại lượt xem tiêu đề.
Vấn đề là khung của chế độ xem tiêu đề trở nên không hợp lệ sau khi xóa/tải lại hoạt ảnh. Tất cả các lỗi khác (bao gồm cả tái sử dụng các tế bào) không thực sự quan trọng bởi vì nó chỉ là dự án thử nghiệm mà tôi đã viết để hiển thị vấn đề với khung nhìn tiêu đề. Lý do tại sao dự án của bạn không có vấn đề này là bạn luôn tạo lại chế độ xem tiêu đề bị ảnh hưởng bởi hoạt ảnh và không làm điều đó là toàn bộ điểm của chế độ xem tiêu đề "bộ nhớ cache". Ngoài ra tôi đã không nhận được bình luận của bạn về mất phím ban đầu (ngay trước khi loại bỏ tiêu đề từ bộ nhớ cache). – folex
Nhưng dù sao, chế độ xem tiêu đề không được chia nhỏ sau hoạt ảnh, điều đó chỉ là sai. Nếu tôi muốn sử dụng chế độ xem rất giống nhau, tôi sẽ có thể sử dụng chính xác cùng một chế độ xem nếu nó không bị hỏng và nếu chế độ xem đó hiển thị một lần trong cấu trúc phân cấp chế độ xem. Nếu bạn có thể, hãy cố gắng không xóa bộ nhớ cache và bạn sẽ kết thúc với chế độ xem bị hỏng. – folex
Tôi sẽ cố gắng giải thích tốt hơn ý nghĩa của các phím sai. Bạn có chế độ xem tiêu đề được lưu trong bộ nhớ cache cho các khóa 0,1,2. Khi bạn xóa phần đầu tiên (chỉ mục = 0) và làm mới phần 2, làm mới đó sẽ được gọi với chỉ mục = 1 - vì phần đầu tiên biến mất và tất cả các phần khác được dịch chuyển bằng -1. Vì vậy, khi làm mới tiêu đề, dựa trên mã của bạn, bạn sẽ trả lại chế độ xem tiêu đề bằng khóa 1, nhưng uiview chính xác cũng được sử dụng cho phần thứ hai trước đó (phần này không được làm mới và giữ chế độ xem tiêu đề cũ). Có cùng UIView ở 2 nơi mà tôi tin là nguyên nhân gây ra sự cố. –