2010-05-22 15 views
28

Ví dụ: tôi có IBAction được kết nối với UIButton trong trình tạo giao diện.Cách tốt nhất để gọi IBAction từ trong mã là gì?

- (IBAction)functionToBeCalled:(id)sender 
{ 
    // do something here 

} 

Với-in mã của tôi, nói ví dụ trong phương pháp khác, cách tốt nhất để gọi đó là IBAction là gì?

Nếu tôi cố gắng gọi nó như thế này, tôi nhận được một lỗi:

[self functionToBeCalled:]; 

Nhưng, nếu tôi cố gắng gọi nó như thế này (gian lận một chút, tôi nghĩ), nó hoạt động tốt:

[self functionToBeCalled:0]; 

Cách thích hợp để gọi đúng cách là gì?

Trả lời

66

Cách thích hợp là một trong hai:

- [self functionToBeCalled:nil] 

Để vượt qua một người gửi nil, chỉ ra rằng nó không được gọi là thông qua các khuôn khổ bình thường.

HOẶC

- [self functionToBeCalled:self] 

Để vượt qua chính mình như người gửi, mà cũng là đúng.

Loại nào để chọn tùy thuộc vào chức năng chính xác của chức năng và những gì người dùng mong đợi.

+0

hoàn hảo, cảm ơn bạn! – iwasrobbed

+0

Điều gì về việc chuyển [thẻ người gửi] thông qua lập trình? – Andy

+1

@Andy, Bạn có thể chuyển vào bất kỳ lớp con NSView nào cho các phương thức đó. Thực ra, bạn có thể vượt qua bất kỳ NSObject nào! (id) Là một kiểu chung có thể chứa bất kỳ tham số nào. Chỉ cần chắc chắn để gửi những gì IBAction dự kiến ​​sẽ nhận được (thường là một phân lớp của NSView) –

6

IMO gọi số IBAction chỉ nên được kích hoạt bởi tác vụ giao diện người dùng (ví dụ: nhấn nút). Nếu bạn cần phải chạy một số mã từ nhiều nơi, sau đó bạn có thể trích xuất mã từ IBAction vào một phương pháp mới, và gọi là phương pháp từ cả hai nơi

- (IBAction)onButtonTap:(id)sender 
{ 
    [self doSomething]; 
} 

này cho phép bạn làm thêm lý dựa trên người gửi (có lẽ bạn có thể gán cùng một hành động cho nhiều nút và quyết định việc cần làm dựa trên thông số sender). Và cũng làm giảm số lượng mã mà bạn cần phải viết trong IBAction (giữ cho việc thực hiện bộ điều khiển của bạn được sạch sẽ).