2012-04-21 21 views
6

Cho đến nay tôi chỉ cần thực hiện các ô mẫu thử nghiệm với các thiết kế được xác định trước (bình thường, phụ đề, v.v.) và nó không phải là một vấn đề.Các ô mẫu thử iOS có các UIControls bên trong

Bây giờ tôi cần triển khai các ô mẫu thử chứa một số nút điều khiển như công tắc phân đoạn, công tắc hoặc bất kỳ thiết bị nào khác. Vấn đề là tôi đã không thể tìm ra cách các hành động được kích hoạt được thực hiện và chúng liên quan đến sự kiểm soát như thế nào. Ngoài ra tôi không tìm thấy bất kỳ ví dụ về cách các tế bào nguyên mẫu khác nhau bên trong một UITableViewController duy nhất được thực hiện.

Tôi biết đó là một câu hỏi chung, nhưng tôi đánh giá cao một số gợi ý ở đây. Có thể ai đó biết về một số tài liệu, hướng dẫn, v.v. Vâng, mọi trợ giúp sẽ làm,

Thnaks trước.

Trả lời

11

Tôi cũng mất một thời gian để hiểu cách sử dụng các ô mẫu thử nghiệm. Nếu bạn muốn truy cập các phần tử giao diện người dùng bên trong một ô mẫu, bạn phải tạo một lớp con của UITableViewCell và gán nó cho ô mẫu trong Bộ dựng giao diện. Sau đó, bạn phải xác định các tính chất IBOutlet bằng tay ví dụ .:

@interface OptionSwitchCell : UITableViewCell 
@property (weak, nonatomic) IBOutlet UISwitch* switchControl; 
@end 

Sau đó, bạn có thể kết nối các thành phần giao diện thông qua điều khiển kéo từ yếu tố để định nghĩa tài sản trong giao diện giúp việc. Thay vào đó, IBActions có thể được xác định bên trong Trình điều khiển Chế độ xem sở hữu. Bạn có thể điều khiển-kéo từ một phần tử giao diện vào tập tin tiêu đề Bộ điều khiển Xem và tạo một hành động. Bên trong việc thực hiện hành động, bạn có thể muốn biết ô nào đang kích hoạt hành động. Tôi làm điều đó như thế này:

@implementation SomeTableViewController 

- (IBAction)toggleActivity:(id)sender { 
    OptionSwitchCell* cell = (OptionSwitchCell *)[sender superview].superview; 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
    ... 
} 

@end 

Một giải pháp cho việc tìm kiếm các ô tương ứng và đường dẫn chỉ mục (bởi jrturton):

- (IBAction)toggleActivity:(id)sender { 
    CGPoint hitPoint = [sender convertPoint:CGPointZero toView:self.tableView]; 
    NSIndexPath *hitIndex = [self.tableView indexPathForRowAtPoint:hitPoint]; 
    OptionSwitchCell* cell = (OptionSwitchCell *)[self.tableView cellForRowAtIndexPath:hitIndex]; 
    ... 
} 

Mặc dù đây là một chút kỳ quặc, tôi đã không tìm thấy một giải pháp tốt hơn cho đến nay. Hy vọng rằng sẽ giúp.

+1

Một vài phút trước, tôi tìm thấy video này (và phần thứ hai của nó): http://youtu.be/0AsChJk422c nó là nhiều hơn hoặc ít hơn những gì bạn giải thích nhưng anh/cô ấy sử dụng một đại biểu. Nguyên tắc tương tự, nhưng có vẻ sạch hơn một chút. Cảm ơn câu trả lời của bạn ! – Marcal

+0

Nó thực sự là một giải pháp sạch hơn. Cảm ơn con trỏ. Mặc dù hơi nhiều mã soạn sẵn cho tất cả các giao thức. – Sbhklr

+1

Cách tốt hơn để tìm hàng điều khiển có thể tìm thấy trong câu trả lời của tôi ở đây: http://stackoverflow.com/questions/9274494/how-to-know-the-uitableview-row-number/9274863#9274863 – jrturton