2014-12-30 15 views
7

Tôi có một tùy chỉnh động UITableViewCell tận dụng bố cục tự động.Cách tiếp cận ưa thích để thay đổi nội dung UITableViewCell dựa trên chiều rộng ô

Tôi thay đổi nội dung văn bản của nhãn, tùy thuộc vào độ rộng của ô.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ... 
    cell.someLabel.text = CGRectGetWidth(cell.bounds) < 321 ? @"Concise" : @"Much longer blurb"; 

    return cell; 
} 

reloadData được gọi trong khi chuyển hướng để cập nhật nhãn.

Trong khi điều này xảy ra để làm việc, tôi tưởng tượng có một cách tốt hơn để xử lý này mà không liên quan đến chi phí nạp lại tableView.

(Không ai trong số những hạn chế cần phải được thay đổi. Các nhãn là ở cùng một chỗ, nhưng đơn giản chỉ ra nội dung khác nhau khi có nhiều chỗ cho nó.)

  • Tôi có nên phân lớp UILabel và thay đổi văn bản trong -didMoveToSuperview?

  • Có thể thay đổi văn bản trong -layoutSubViews không? (Điều đó sẽ không gây ra một cách bố trí khác vì văn bản đã được thay đổi?)

Cảm ơn bạn đã trả lời!

+0

"không liên quan đến phí tải lại bảng" Tôi nghĩ điều đầu tiên cần làm là suy nghĩ lại lý do bạn tin rằng tải lại chế độ xem bảng là "trên cao". Nó khá hiệu quả, vì chỉ có dữ liệu ô có thể nhìn thấy được thực sự được tải mới - và mô hình dữ liệu của bạn phải hoàn toàn hiệu quả hoặc bạn đang làm sai. – matt

+0

Nó chỉ có vẻ như quá mức cần thiết, Matt. Bố cục tự động đã xảy ra, do kết quả của tự động xoay vòng và tôi đoán nó có thể được xử lý ngay trong thẻ vượt qua bố cục đã xảy ra. Tôi chỉ không biết đủ về bố cục tự động để biết cách mà ô hoặc nhãn sẽ xử lý nó. –

+0

Nhưng vấn đề tôi không đề cập đến là nhấp nháy tinh tế của tải lại mà bạn sẽ không nhìn thấy mà không cần tải lại. Nó sẽ trông đẹp hơn nếu tôi không phải tải lại bảng, và nó chỉ đơn giản là tự động xoay và redrew chính nó (với nội dung khác nhau). Khả thi? –

Trả lời

4

Chỉ cần thêm logic này vào layoutSubviews sẽ thực hiện thủ thuật. Nó được gọi là mỗi khi công cụ bố trí tự động thực hiện điều đó.

-(void)layoutSubviews { 
    self.someLabel.text = CGRectGetWidth(self.bounds) < 321 ? @"Concise" : @"Much longer blurb"; 
    [super layoutSubviews]; 
} 
+0

Tôi đang sử dụng '-viewWillTransitionToSize: withTransitionCoordinator:' Tôi muốn cố gắng xử lý tất cả trong bố cục tự động (vì các ô hiển thị đã phản ứng với quá trình chuyển đổi mà không cần phải tải lại bảng). Tôi chỉ cần khám phá nơi để thực sự thay đổi văn bản. –

+0

Nếu các tế bào hình ảnh đã phản ứng thì tại sao không đặt sự thay đổi của văn bản bất cứ nơi nào phản ứng xảy ra? – Rick

+0

Đó là suy nghĩ của tôi, nhưng tôi không biết phương pháp để đưa nó vào, và tôi đã không bao giờ tinkered với '-layoutSubviews' nếu đó là phương pháp đúng để ghi đè lên. Sẽ đi sâu vào cái chưa biết trong một vài ngày và cố gắng khám phá nơi mà sự thay đổi của văn bản sẽ xảy ra, nếu không ai có câu trả lời đó. –

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