2012-04-16 14 views
36

Tôi là người mới với Storyboard và vì vậy tôi gặp một số khó khăn ...Kết nối ổ cắm của một Prototype Cell trong bảng phân cảnh

Tôi đã tạo một TableViewController và tôi muốn tùy chỉnh Nguyên mẫu ô. Trong Prototype Cell Tôi đã thêm một số Labels Tôi muốn tùy chỉnh với lớp của riêng tôi mà kế thừa từ UITableViewCell (AreaListCell). Trong Storyboard, cho Prototype Cell tôi đã cấu hình Custom Class với "AreaListCell" và phong cách của nó là "Custom".

Trong bảng phân cảnh, khi tôi chọn Cell Prototype và sau đó là trợ lý, trợ lý hiển thị lớp của tôi triển khai UITableViewController (AreasTableViewController) và không
lớp "AreaListCell" của tôi.

Hậu quả là tôi có thể tạo ổ cắm (sử dụng Ctrl + Kéo từ nhãn của Nguyên mẫu ô) sang lớp AreasTableViewController nhưng không tạo ra lớp AreaListCell! Bất kỳ ý tưởng làm thế nào để kết nối các Prototype Cell với lớp AreaListCell của tôi?

Cảm ơn sự giúp đỡ của bạn!

Trả lời

127

CẬP NHẬT: Kể từ Xcode 4.6 (có thể sớm hơn), giờ đây bạn có thể tạo các cửa hàng bằng cách kéo-điều khiển! - Điều này phải được thực hiện vào một phần giao diện hoặc mở rộng lớp (phần mở rộng lớp không tồn tại theo mặc định cho các lớp con mới. Cảm ơn Steve Haley đã chỉ ra điều này.

Bạn không thể tự động thoát ra khỏi ổ cắm kết nối và tạo ra bằng cách kéo vào khối mã trong trình soạn thảo trợ, đó là nghèo, nhưng bạn có thể tạo các cửa hàng bằng tay và kết nối chúng sau đó

trong giao diện tế bào phân lớp của bạn:.

@interface CustomCell : UITableViewCell 

@property (nonatomic) IBOutlet UILabel* customLabel; 

@end 

Tổng hợp như bình thường trong quá trình thực hiện.

Trong bảng phân cảnh, chọn ô và đi đến thanh tra kết nối, bạn sẽ thấy cửa hàng mới.Kéo từ đó đến các yếu tố có liên quan trong nguyên mẫu của bạn:

enter image description here

này bây giờ có thể được truy cập như cell.customLabel trong phương pháp cellForRowAtIndexPath: của bạn.

+0

Tôi đã từng làm như vậy cho ô của mình, nhưng đột nhiên nó dừng hoạt động, customLabel IBOutlet == nil của tôi và nó không xuất hiện trong ô. Điều gì có thể là nguyên nhân của vấn đề? Trong các cửa hàng đồ lưu trữ được kết nối. – BergP

+0

TLDR: tạo một lối thoát lập trình và kết nối nó bằng cách điều khiển + kéo từ bảng phân cảnh – Christoph

21

Vâng, bạn không thể kết nối các chế độ xem bên trong ô mẫu thử tùy chỉnh bằng cách sử dụng phương pháp kéo Ctrl +. Thay vào đó, hãy sử dụng thuộc tính thẻ của chế độ xem và sau đó khi bạn tạo ô, hãy kéo nhãn ra bằng cách sử dụng thẻ của chúng.

đây:

//Let's assume you have 3 labels. One for a name, One for a count, One for a detail 
//In your storyboard give the name label tag=1, count tag=2, and detail tag=3 


- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomTableViewCell *theCell = [tableView dequeueReusableCellWithIdentifier:@"Prototype Cell"]; 

    UILabel *nameLabel = (UILabel *)[theCell viewWithTag:1]; 
    UILabel *countLabel = (UILabel *)[theCell viewWithTag:2]; 
    UILabel *detailLabel = (UILabel *)[theCell viewWithTag:3]; 

    nameLabel.text = @"name"; 
    countLabel.text = @"count"; 
    detailLabel.text = @"details"; 

    return theCell; 
} 

Bạn cũng có thể thiết lập các nhãn lên như thuộc tính trong mã di động tùy chỉnh của bạn và sau đó khi các tế bào được khởi tạo sử dụng các cuộc gọi viewWithTag gán các thuộc tính nhãn để các nhãn bạn đã tạo trên bảng phân cảnh của bạn.

Tôi mất vài ngày để nhận ra rằng tôi không thể Ctrl + kéo từ bên trong ô tùy chỉnh để tạo IBOutlet.

Chúc may mắn!

CHỈNH SỬA: Bạn CÓ THỂ tạo IBOutlets cho các nhãn của bạn bên trong ô tùy chỉnh và tạo liên kết programatticaly, không thông qua phương pháp kéo Ctrl +.

EDIT 2: Tôi đã hoàn toàn sai, bạn có thể ctrl + kéo. Xem câu trả lời thứ hai cho câu hỏi này. Đó là khó khăn, nhưng nó hoạt động khá tốt.

+0

Bạn chắc chắn có thể kết nối các cửa hàng từ một nguyên mẫu để một lớp con di động sử dụng như một nguyên mẫu. Tôi sẽ trả lời với các chi tiết một khi tôi có thể có được một ví dụ với nhau. – jrturton

+0

Với ctrl + kéo? –

+0

OK, bạn không thể tự động tạo các cửa hàng bằng cách kéo điều khiển đến trợ lý, nhưng bạn CÓ THỂ tạo các cửa hàng theo cách thủ công và kết nối chúng. Bạn chắc chắn không cần phải sử dụng thẻ. Downvote là một chút mặc dù, nếu bạn chỉnh sửa câu trả lời tôi sẽ xóa nó (Tôi không thể thay đổi phiếu bầu ngay bây giờ trừ khi bạn chỉnh sửa) – jrturton

0

Swift 3

// chúng ta đang sử dụng này nếu hình ảnh của bạn đang ở máy chủ.

// chúng tôi đang tải hình ảnh từ url.

// bạn có thể đặt hình ảnh từ Xcode của mình.

  1. URL của hình ảnh đang ở trong một tên mảng = thumbnail tức là self.thumbnail [indexPath.row]
  2. trên UITableViewCell đặt một IMAGExem trên tế bào
  3. chọn UIImageView gán cho nó một thẻ từ kịch bản này.

    let pictureURL = URL(string: self.thumbnail[indexPath.row])! 
    let pictureData = NSData(contentsOf: pictureURL as URL) 
    let catPicture = UIImage(data: pictureData as! Data) 
    var imageV = UIImageView() 
    imageV = cell?.viewWithTag(1) as! UIImageView 
    imageV.image = catPicture 
    
Các vấn đề liên quan