2009-11-24 8 views
5

Xin chào, tôi đang tìm kiếm các tài nguyên hữu ích về đại biểu. Tôi hiểu rằng đại biểu ngồi trong nền và nhận được tin nhắn khi một số điều xảy ra - ví dụ: ô bảng được chọn hoặc dữ liệu từ kết nối qua web được truy xuất.Đại biểu, không thể có được đầu của tôi xung quanh họ

Điều tôi muốn biết đặc biệt là cách sử dụng các đại biểu có nhiều đối tượng. Theo như tôi biết, việc chỉ định cùng một đại biểu cho một đối tượng (ví dụ: ô bảng) sẽ gây ra cùng một sự kiện được gọi cho cả hai ô cùng một lúc. Có bất cứ điều gì tương đương với instantiating một đại biểu cho một đối tượng cụ thể?

Cảm ơn trước!

Trả lời

6

Trong Cocoa, các đối tượng hầu như luôn luôn tự nhận mình khi gọi một phương pháp đại biểu. Ví dụ, UITableView đi chính nó như là tham số đầu tiên của thông điệp đại biểu khi gọi nó:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

Nếu bạn muốn các đại biểu cùng để xử lý nhiều UITableViews, sau đó bạn chỉ cần một số điều kiện về đối tượng tableView truyền cho phương pháp:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (tableView == self.myFirstTableView) { 
     // do stuff 
    } else if (tableView == self.mySecondtableView) { 
     // do other stuff 
    } 
} 

}

Nếu bạn không muốn so sánh các con trỏ đối tượng trực tiếp, bạn có thể luôn luôn sử dụng tag tài sản để xác định duy nhất quan điểm của bạn.

2

Thông thường, nếu bạn có phương thức đại biểu có thể nhận tin nhắn từ nhiều đối tượng khác nhau, bạn chỉ cần có đối tượng gọi tự chuyển cho đại biểu trong tin nhắn (gọi phương thức).

Ví dụ, nếu bạn muốn có một phương pháp đại biểu để trích xuất văn bản từ nhãn của tableviewcell, định nghĩa phương pháp sẽ giống như thế:

-(void) extractTextFromLabelOfTableCell:(UITableViewCell *) theCallingCell{ 
... 
NSString *extractedText=theCallingCell.textLabel.text; 
} 

Bạn sẽ gọi phương thức từ một tableviewcell thusly:

[delegate extractTextFromLabelOfTableCell:self]; 

Mỗi trường hợp của tableviewcell sẽ tự gửi cho đại biểu và đại biểu sẽ trích xuất văn bản của cá thể đó. Theo cách này, một đối tượng đại biểu duy nhất có thể xử lý một số lượng lớn các ô.

1

Đại biểu là cách thêm hành vi vào một lớp học không có phân lớp hoặc để gắn bộ điều khiển vào lớp.

Trong ví dụ về chế độ xem bảng bạn đã cung cấp, đại biểu đang mở rộng hoặc kiểm soát bảng chứ không phải ô. Bảng được thiết kế để có một bộ điều khiển, các tế bào không phải là. Lựa chọn thiết kế này là lý do tại sao bạn không thể chỉ định các đại biểu cụ thể cho từng ô.

Tuy nhiên, các phương thức ủy nhiệm sẽ luôn công bố đối tượng nguồn (đối tượng được đính kèm) và các tham số có liên quan (như ô liên quan), vì vậy bạn luôn có thể xử lý đầy đủ hành động. Trong trường hợp của bạn, nếu bạn có một ô và bạn muốn ô tự quản lý, thì phương thức ủy nhiệm (có thể được triển khai trên UITableViewController) của bạn có thể tìm nạp ô từ bảng nguồn bằng cách sử dụng NSIndexPath (được chuyển thành tham số cho phương thức ủy nhiệm) và gọi phương thức trên lớp con của ô để thực hiện công việc của nó.