2013-12-08 16 views
6

Tôi có UIViewController với màu nền tùy chỉnh. Trên đầu trang của nó có một UITableView với UITableViewCells là bán trong suốt (màu trắng với độ mờ 0,5).Nền nhấp nháy UITableViewCell trong suốt khi hoạt ảnh

Vấn đề tôi đổ lỗi và cái tôi đang đập đầu vào tường là trong iOS 7, khi bạn có UITableViewCell với nền nửa trong suốt và bạn cố gắng xóa/chèn/di chuyển hàng (để dựa trên hiệu ứng hoạt ảnh) toàn bộ UITableView với các ô của nó nhấp nháy chỉ trong 0,1 giây và đặt ô nền thành nền trong suốt hơn. Điều này rất khó chịu.

Điều duy nhất tôi đang làm là thiết lập màu nền của self.view với:

self.view.backgroundColor = [UIColor colorWithRed:0.4 green:0.5 blue:0.7 alpha:1]; 

và thiết lập màu nền của các tế bào với:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    cell.backgroundColor = [UIColor colorWithWhite:1 alpha:0.5]; 
} 

Dưới đây là một gif hiển thị cho bạn các vấn đề :

enter image description here

Và anh ấy re's the super simple project: https://github.com/socksz/TransparentCellFlashing

Hãy giúp tôi giải quyết vấn đề khó hiểu này! : P

+0

màu nền của UITableView của bạn là gì? Nếu bạn đã thiết lập một, hãy thử thiết lập nó để "rõ ràng" (hoặc bất kỳ màu sắc của sự lựa chọn của bạn) trong xib/storyboard của bạn. Thông thường trong iOS7, nó được thiết lập để "mặc định", đó là nguyên nhân cho hầu hết các vấn đề này. –

+0

Dường như nó không quan trọng. Tôi đã cố gắng thiết lập màu nền của 'self.view' (đó là chế độ xem bảng) thành' [UIColor clearColor] 'và cũng đã cố gắng nhúng chế độ xem bảng trong' UIView' (chế độ xem chính của trình điều khiển chế độ xem) và đặt màu nền của chế độ xem này để xóa. Không hoạt động. –

+0

OK OK. Sau đó, bạn có thể cần phải ghi đè thuộc tính setSelected() của UITableViewCell của bạn bằng cách phân lớp nó. Hoặc ít nhất sử dụng thuộc tính backgroundView thay vì backgroundColor. –

Trả lời

11
  1. Tạo một lớp con của UITableViewCell (Chẳng hạn như tên: CustomCell), và ghi đè lên các phương pháp trong CustomCell.m:

    - (id)initWithCoder:(NSCoder *)aDecoder{ 
        self = [super initWithCoder:aDecoder]; 
        if(self){ 
         // Initialization code 
         [self setBackgroundColor:[UIColor clearColor]]; 
         UIView * bgView = [[UIView alloc] initWithFrame:self.frame]; 
         [bgView setBackgroundColor:[UIColor colorWithWhite:1 alpha:0.5]]; 
         [self addSubview:bgView]; 
        } 
        return self; 
    } 
    
  2. Hủy bỏ phương pháp willDisplayCell trong MasterViewController.m

    - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
        cell.backgroundColor = [UIColor colorWithWhite:1 alpha:0.5]; 
    } 
    
  3. Thay đổi phương thức cellForRowAtIndexPath trong MasterViewController.m

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
        CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 
        [self configureCell:cell atIndexPath:indexPath]; 
        return cell; 
    } 
    
  4. Thay đổi của tế bào kiểu lớp trong storyboard enter image description here

Chỉ cần có một thử: D

enter image description here

+1

Tôi yêu bạn! Nó hoạt động như một sự quyến rũ tỏa sáng. Tại sao chúng ta cần thêm chế độ xem tùy chỉnh làm chế độ xem nền?Có lẽ vì các thuộc tính 'backgroundView' và' backgroundColor' của 'UITableViewCell' hoạt động theo cách đó và chúng ta không thể làm gì để thay đổi hành vi đó? Cảm ơn người đàn ông! PS: Ngoài ra +1 cho GIF :-) –

+1

Nó hoạt động tốt trong iOS6 mà chúng tôi chỉ thiết lập backgroundView của ô hoặc backgroundColor.Actually, tôi không hoàn toàn chắc chắn lý do tại sao các tế bào nhấp nháy trong khi cập nhật trong iOS7 ...: D – Joiningss

+0

Yea, đó là iOS 7. Tuy nhiên cảm ơn bạn một lần nữa. –

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