2009-07-22 30 views

Trả lời

11

Nó không phải trực tiếp tiếp cận, vì vậy bạn sẽ phải làm điều đó theo cách cũ thời và tự sift thông qua các subviews của searchDisplayController.searchResultsTableView của bạn. Dưới đây là một ví dụ:

UITableView *tableView = self.searchDisplayController.searchResultsTableView; 
for(UIView *subview in tableView.subviews) { 
    if([subview class] == [UILabel class]) { 
     UILabel *lbl = (UILabel*)subview; // sv changed to subview. 
     lbl.text = @"My custom string"; 
    } 
} 

tôi sẽ không đề nghị này vì bạn đang dựa vào hành vi nội bộ của searchResultsTableView mà là nhiều hơn khả năng sẽ thay đổi tại một số điểm, phá vỡ ứng dụng của bạn. Việc mở một yêu cầu về lỗi/tính năng với Apple sẽ là một cách hay để đến đây.

+0

Thật tuyệt, cảm ơn bạn rất nhiều ... – Stefan

+0

Nhưng khi nào bạn thực hiện tinh chỉnh? Chữ "UILabel" này xuất hiện trong phần 'subviews' chỉ sau khi nó được hiển thị ... –

+0

Vâng, chúng ta đặt mã này ở đâu ??? – Napolux

14

Tôi đã xóa nhãn thành công bằng cách không bao giờ có tập hợp kết quả trống.

Nếu không có kết quả vì chúng đang được tìm nạp từ máy chủ, hãy đặt lại nguồn dữ liệu của bạn thành một hàng duy nhất và để nó hiển thị ô xem bảng trống.

Bên cạnh đó, sử dụng logic để refeuse để chọn "giả" tế bào:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *listItem = [self.filteredListContent objectAtIndex:indexPath.row]; 
    if ([listItem isEqualToString:@""]) { 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    } 
} 

Tôi cũng đã tìm thấy nó cần thiết để thêm "giả" logic cell vào phương pháp willSelect đại biểu:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *listItem = [self.filteredListContent objectAtIndex:indexPath.row]; 
    if ([listItem isEqualToString:@""]) { 
     return nil; 
    } 
    return indexPath; 
} 
Các vấn đề liên quan