2010-06-28 23 views
9

Tôi muốn hiển thị một bảng có nhiều phần và chỉ bắt đầu 3 phần tử của các phần. Khi người dùng chạm vào phần chân trang, phần chân trang bị mất (trở thành 0) và tất cả các phần tử của phần đó sẽ được hiển thị cho người dùng.Các ô hiển thị ban đầu sẽ ẩn sau khi gọi lại các phần: withRowAnimation: phương thức

Chính vì lý do này, khi người dùng chạm chân phần, tôi gọi dưới mã:

-(void)loadMoreRowsInSection:(NSInteger)section { 
    [groupStates replaceObjectAtIndex:section withObject:[NSNumber numberWithBool:YES]]; 
    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:section] withRowAnimation:NO]; 
} 

Tôi có đoạn code sau để hiển thị phần chân trang hay không:

-(UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { 
    int count = [[(NSDictionary*)[filters objectAtIndex:section] valueForKeyPath:@"values.value"] count]; 
    if (count>3&&![[groupStates objectAtIndex:section] boolValue]) { 
     LoadMoreFooter* loadMoreFooter = [[LoadMoreFooter alloc] initWithParent:self Section:section]; 
     return [loadMoreFooter view]; 
    } 
    else return nil; 
} 

Khi người dùng vòi chức năng phần footer và loadMoreRowsInSection được gọi, phần này được tải lại nhưng các hàng hiện tại của phần đó biến mất. Khi tôi cuộn xuống dưới, làm cho các hàng ra khỏi màn hình và một lần nữa, các hàng xuất hiện trở lại.

Nếu tôi gọi reloadData thay vì reloadSections:withRowAnimation:, không có vấn đề gì nhưng có vẻ như không nên tải lại toàn bộ bảng. Ngoài ra không có hoạt ảnh trong reloadTable.

Có ai gặp sự cố này không?

+1

tham số thứ hai của '-reloadSections: withRowAnimation:' không phải là 'BOOL'; nó là một loại 'UITableViewRowAnimation' – user102008

Trả lời

1

Tôi đã gặp sự cố tương tự khi các tiêu đề phần sẽ bị kẹt ở bất cứ đâu. Mặc dù vấn đề của tôi vẫn tồn tại ngay cả khi cuộn on/off màn hình:

iphone app screenshot

Chỉ cách tôi đã tìm thấy để sửa chữa nó là chỉ cần sử dụng reloadData thay vì reloadSections:withRowAnimation:.

5

Tôi cũng gặp sự cố này. Thay vào đó, tôi đã sử dụng UITableViewRowAnimationNone nhưng vẫn làm hoạt hình cho phần vì lý do nào đó (mà reloadData không làm) nhưng nó cũng hiển thị chính xác sau khi hoạt ảnh.

4

Thêm cuộc gọi đến reloadData sau khi cuộc gọi đến reloadSections:withRowAnimation: xuất hiện để khắc phục sự cố ô biến mất mà không ảnh hưởng đến hoạt ảnh.

+0

Câu trả lời Avesome :-) –

20

đây là một câu hỏi cũ, nhưng tôi nghĩ rằng tôi biết điều gì gây ra điều này.

Đây có phải là ô "tĩnh" theo nghĩa bạn đang tự mình tham chiếu không? Trong trường hợp đó, vấn đề có thể là:

Khi bạn thực hiện tải lại động, chế độ xem bảng sẽ làm mờ các ô hiện có trong khi đồng thời làm mờ dần các ô mới. Vấn đề là khi ô "mới" là ô giống hệt như ô cũ, cùng một ô sẽ bị mờ dần và mờ đi cùng một lúc! Và trong trường hợp của bạn, hoạt ảnh mờ dần sẽ được ưu tiên và ô bị ẩn.

+0

bingo - đây chính là điều tôi đang làm – Lee

+0

giải thích tốt - nó giúp tôi tìm ra cốt lõi của vấn đề ... Tôi đã khắc phục vấn đề 'tế bào tĩnh' này bằng cách thêm mã này sau khi gọi lại các tệp tải xuống có hình động mờ dần ... [UIView animateWithDuration: 0,3 delay: 0,3 tùy chọn: 0 hoạt ảnh:^{ self.yourCell.alpha = 1.0f; } hoàn thành: nil]; –

0

Lỗi của tôi là: Tôi đã có một TableView với nhiều phần. Khi tôi chọn một phần để mở rộng (và hiển thị ô), các phần khác ở trên đã được ẩn.

Tôi đã coi tiêu đề là ô.

Giải pháp của tôi mà không reloadData():

bên override func viewDidLoad() phương pháp tôi đã sử dụng mã này:

tableTeams.registerNib(UINib(nibName: "header", bundle: nil), 
forCellReuseIdentifier: "HeaderCell") 

Nhưng tôi nên đã sử dụng này:

tableTeams.registerNib(UINib(nibName: "header", bundle: nil), 
forHeaderFooterViewReuseIdentifier: "HeaderCell") 

và bên func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?, tôi sẽ sử dụng mã này:

func tableView(tableView: UITableView, viewForHeaderInSection section: 
Int) -> UIView? { 
     let cell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("HeaderCell") 
as! CustomHeaderUiView 

Tôi hy vọng điều này sẽ hữu ích!

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