2012-06-15 17 views
11

Tôi có một lớp con UITableViewController với các ô mẫu thử được mô phỏng trong bảng phân cảnh.Có dequeueReusableCellWithIdentifier: gọi trình khởi tạo trong lớp con UITableViewCell của tôi không?

Có một số tiền hợp lý của mã trong phương thức ủy quyền cellForRowAtIndexPath thiết lập các ô. Vấn đề là tôi không cần hầu hết nó nếu tế bào chỉ bị khử nước từ hồ bơi tái sử dụng, bởi vì nó đã được thực hiện khi tế bào bị bốc hơi lần đầu tiên. Tôi không thể làm điều đó trong bảng phân cảnh vì có một số thuộc tính mà tôi chỉ có thể truy cập theo chương trình.

UITableViewController có gọi trình khởi tạo trong lớp con UITableViewCell của tôi khi nó lấy một ô mẫu từ bảng phân cảnh không? Tôi đã thử (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier nhưng điều đó dường như không phải là một phần của quy trình.

Trả lời

12

Khi một cá thể UITableView gọi dequeueReusableTileWithIdentifier:, ô không được khởi tạo lại. Thay vào đó, trong cuộc gọi đó, UITableViewCell được dequeued sẽ gọi -(void)prepareForReuse. Điều này là do reinitializing tế bào là tốn kém, và nếu chúng ta có thể cung cấp một phương pháp đơn giản hơn nhiều để chuẩn bị cho tái sử dụng của nó (eh, eh, có được nó?) Nó tiết kiệm rất nhiều công việc của CPU.

Ergo, nếu bạn đang sử dụng ô tùy chỉnh, hãy ghi đè UITableViewCell prepareForReuse.

10

Tôi có thể không cụm từ câu hỏi của mình đúng cách nhưng tôi đang tìm kiếm ở đây thực sự là (void)awakeFromNib.

Được gọi một lần khi ô được khử khí và không tái sử dụng. Cho phép tôi thực hiện một số thiết lập theo lập trình mà không có ý nghĩa khi thực hiện trong bảng phân cảnh.

+1

(vodi) awakeFromNib hoạt động hoàn hảo cho nội dung bạn muốn chỉ xảy ra một lần, như thêm công cụ nhận dạng cử chỉ vào UILabel. –

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