2013-06-06 33 views
5

Tôi mới phát triển iOS. Tôi ít nhầm lẫn khi tôi thêm một nút programmatically.When chúng ta gán một mục tiêu để nút như:addTarget: self so với addTarget: nil

[button addTarget:self action:@selector(CallMe) forControlEvents:UIControlEventTouchUpInside]; 

[button addTarget:nil action:@selector(CallMe) forControlEvents:UIControlEventTouchUpInside]; 

Nó được gọi CallMe phương pháp trong cả hai trường hợp. Ai có thể giải thích cho tôi những gì là sự khác biệt thực sự giữa hai dòng mã. Nó sẽ hữu ích hơn nếu bất cứ ai có thể giải thích làm việc của addTarget đặc biệt. Cảm ơn bạn rất nhiều. Trợ giúp sẽ được chiếm đoạt.

+2

@ H2CO3 sai. Thêm một mục tiêu nil gửi thông báo hành động dọc theo chuỗi trả lời. – Sven

+0

@ H2CO3 có, bây giờ nó không gọi phương pháp, tôi nghĩ rằng tôi đã không xây dựng mã của tôi thời gian qua, sai lầm ngớ ngẩn.But bạn có thể cho tôi biết lý do tại sao chúng tôi vượt qua "tự" để addTarget.According kiến ​​thức của tôi tự hoạt động như con trỏ này Xin đừng bận tâm nhưng tôi đang bối rối, bạn sẽ giúp tôi ra khỏi điều này. –

+0

@Sven Sai, thực sự, quên mất điều đó. Tôi đứng sửa. –

Trả lời

6

Nếu bạn thêm tự hoặc bất kỳ đối tượng khác như mục tiêu cho một tin nhắn hành động, tin nhắn sẽ được gửi đến chính xác đối tượng này.

Thêm nil làm mục tiêu có nghĩa là mục tiêu thực tế sẽ được tìm kiếm trong thời gian chạy khi thông báo được kích hoạt. Việc tra cứu bắt đầu từ đối tượng trả lời đầu tiên và liên tục từ đó dọc theo chuỗi trả lời, đó là bằng cách thử đối tượng được trả về bởi phương thức nextResponder cho đến khi một đối tượng được tìm thấy thực hiện phương thức này. Hãy xem event handling guide để biết thêm thông tin về thứ tự tra cứu chính xác.

+2

Vì vậy, bạn nên đặt nó thành nil để cha mẹ (người gọi) xử lý phương thức hành động như trái ngược để gửi cho con đối tượng cha mẹ? – user523234

1

Theo Các đối tượng mục tiêu của documentation,

Apple là tham số gửi đến addTarget phương pháp-có nghĩa là, đối tượng mà thông điệp hành động được gửi đi. Nếu đây là số không, chuỗi trả lời được tìm kiếm cho một đối tượng sẵn sàng trả lời thông báo hành động.

Nếu bạn muốn loại bỏ các hành động, bạn có thể vượt qua con số không để loại bỏ tất cả các mục tiêu kết hợp với hành động và các sự kiện kiểm soát quy định về phương pháp mục tiêu loại bỏ,

[button removeTarget:nil action:@selector(CallMe) forControlEvents:UIControlEventTouchUpInside]; 
1

Dưới đây là mô tả của tham số mục tiêu từ tài liệu táo cho lớp UIControl:

mục tiêu Mục tiêu đối tượng có nghĩa là, đối tượng mà thông điệp hành động được gửi đi. Nếu đây là số không, chuỗi trả lời được tìm kiếm cho một đối tượng sẵn sàng trả lời thông báo hành động.

Các vấn đề liên quan