Tôi đang cố gắng tìm ra cách đặt UITableViewCellStyle
khi sử dụng các phương pháp mới trong iOS 6 cho UITableView
.Đặt kiểu UITableViewCell khi sử dụng iOS 6 UITableView dequeueReusableCellWithIdentifier: forIndexPath:
Trước đây, khi tạo UITableViewCell
Tôi sẽ thay đổi UITableViewCellStyle
enum để tạo các loại ô mặc định khác nhau khi gọi initWithStyle:
nhưng từ những gì tôi có thể thu thập, điều này không còn là trường hợp.
Các tài liệu Apple cho UITableView
khẳng định:
Return Value: Một UITableViewCell đối tượng với các dạng tái sử dụng đi kèm. Phương thức này luôn trả về một ô hợp lệ.
Thảo luận: Vì lý do hiệu suất, một cái nhìn bảng của nguồn dữ liệu nói chung nên tái sử dụng đối tượng UITableViewCell khi nó gán các tế bào để hàng trong tableView của nó: cellForRowAtIndexPath: phương pháp. Chế độ xem bảng duy trì một hàng đợi hoặc danh sách các đối tượng UITableViewCell mà nguồn dữ liệu đã đánh dấu để sử dụng lại. Gọi phương thức này từ đối tượng nguồn dữ liệu của bạn khi được yêu cầu cung cấp một ô mới cho khung nhìn bảng. Phương pháp này dequeues một tế bào hiện có nếu một là có sẵn hoặc tạo ra một cái mới dựa trên lớp hoặc tập tin nib bạn đã đăng ký trước đó.
quan trọng: Bạn phải đăng ký một lớp học hoặc nib tập tin bằng cách sử dụng registerNib: forCellReuseIdentifier: hoặc registerClass: forCellReuseIdentifier: Phương pháp trước khi gọi phương pháp này.
Nếu bạn đăng ký một lớp cho số nhận dạng được chỉ định và một ô mới phải được tạo, phương thức này khởi tạo ô bằng cách gọi phương thức initWithStyle: reuseIdentifier: của nó. Đối với các ô dựa trên nib, phương thức này sẽ nạp đối tượng ô từ tệp nib được cung cấp. Nếu ô hiện có có sẵn để sử dụng lại, phương pháp này sẽ gọi phương thức prepareForReuse của ô thay thế.
Đây là cách của tôi mới cellForRowAtIndexPath
trông sau khi thực hiện các phương pháp mới:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"cell_identifier";
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellIdentifier];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
return cell;
}
Code tôi có cho đến nay hoạt động tốt nhưng luôn luôn trả về phong cách mặc định. Làm cách nào tôi có thể thay đổi điều này để tôi có thể tạo các ô với các kiểu khác như UITableViewCellStyleDefault
, UITableViewCellStyleValue1
, UITableViewCellStyleValue2
và UITableViewCellStyleSubtitle
?
Tôi không muốn phân lớp UITableViewCell
, tôi chỉ muốn thay đổi kiểu mặc định như tôi có thể làm trước iOS 6. Có vẻ kỳ quặc rằng Apple sẽ cung cấp các phương pháp nâng cao nhưng với tài liệu tối thiểu để hỗ trợ triển khai.
Có ai đã nắm vững điều này hoặc gặp sự cố tương tự không? Tôi đang đấu tranh để tìm bất kỳ thông tin hợp lý nào cả.
Tôi đã bắt đầu thừa nhận rằng điều này sẽ thực sự là trường hợp. Nó không phải là một vấn đề lớn nhưng phải phân lớp 'UITableViewCell' để có được các kiểu mặc định khác là một nỗi đau vì nó chỉ tạo ra các tệp không cần thiết. Cảm ơn bạn đã bình luận và xác nhận những nghi ngờ của tôi. – CaptainRedmuff
Đừng quên rằng thay vì phân lớp, bạn có thể sử dụng phương thức iOS5 cũ, vẫn còn hợp lệ.Bằng cách đó bạn có thể khởi tạo bất kỳ kiểu kiểu ô nào mà bạn muốn. Xem câu trả lời khác. – SpacyRicochet