2010-08-11 7 views
7

Tôi có một UITableView với các ô có chứa điều khiển UISwitch. Nó tương tự như quan điểm bảng trong ứng dụng Đồng hồ của iPhone hiển thị dưới đây ...Nếu tôi thêm điều khiển UISwitch vào từng ô xem bảng của tôi, làm thế nào tôi có thể cho biết ô đó thuộc về ô nào?

alt text http://epicself.com/wp-content/uploads/2009/04/1-1.jpg

Trong phương pháp ứng dụng của tôi cellForRowAtIndexPath, tôi tạo ra và đính kèm các UISwitch kiểm soát như vậy ...

CGRect frameSwitch = CGRectMake(215.0, 10.0, 94.0, 27.0); 
UISwitch *switchEnabled = [[UISwitch alloc] initWithFrame:frameSwitch]; 
[switchEnabled addTarget:self action:@selector(switchToggled:) forControlEvents:UIControlEventValueChanged]; 

cell.accessoryView = switchEnabled; 

Câu hỏi của tôi là, khi chuyển đổi được người dùng bật và phương thức switchToggled được gọi, làm thế nào tôi có thể biết được ô đó thuộc về bảng nào? Tôi thực sự không thể làm gì nhiều với nó mà không biết đó là ngữ cảnh.

Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn!

Trả lời

9

Trong phương pháp hành động của bạn, bạn có thể cast số superview của số điện thoại được thông qua UISwitch (chính là số UITableViewCell), sau đó vượt qua với phương thức indexPathForCell của tableView.

indexPathForCell sẽ trả về đối tượng NSIndexPath, sau đó bạn có thể sử dụng để lập chỉ mục cho biểu mẫu dữ liệu của bạn sửa đổi. Sau đó, tất cả những gì bạn phải làm là gọi số reloadData trên số tableView.

Ngoài ra, trong cellForRowAtIndexPath, bạn nên đặt trạng thái của UISwitch dựa trên mô hình của bạn.

+1

đây thực sự là một cách tiếp cận tốt hơn nhiều bởi vì nó không sử dụng hết thuộc tính thẻ, thường là một điều tốt để có sẵn, cảm ơn! – BeachRunnerFred

+5

Chỉ dành cho những người vẫn còn tìm thấy một vấn đề với superview, đôi khi bạn cần phải trỏ đến superview của superview của kiểm soát kể từ khi kiểm soát có thể là trong UITableViewCellContentView. Giám sát đến UITableViewCellContentView sẽ là UITableViewCell được yêu cầu – mrd3650

9

Trước hết, sửa chữa rò rỉ bộ nhớ:

UISwitch *switchEnabled = [[[UISwitch alloc] initWithFrame:frameSwitch] autorelease]; 

Sau đó, chọn một trong các tùy chọn này:

switchEnabled.tag = someInt; // before adding it to the cell 

NSLog(@"switched %d",switch.tag); // to see which switch was toggled 

hoặc

UITableViewCell *parentCell = switchEnabled.superview; 
// + some magic to see which cell this actually is 
+0

+1 cho '.tag'. Đó là cách đơn giản nhất. Tải nó lên với chỉ mục vào mảng dữ liệu bạn đang điền vào bảng từ đó. –

+0

cảm ơn, mvd! thuộc tính thẻ sẽ hoạt động độc đáo! không có rò rỉ, tôi chỉ quên bao gồm cuộc gọi phát hành của tôi trong câu hỏi. – BeachRunnerFred