Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 2 của 2
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Cơ chế truyền delegate trong Objective C như thế nào ???

    mình đọc code một số chưong trình iphone miễn phí trên mạng thấy có cách gọi delegate như sau:

    Mã:
     if([[(NSDictionary*)infoArray objectForKey:@"bild"] length] >0){         [Delegate jmpTo:@"card" name:@"a..c" thePara:infoArray];    } else {        [Delegate jmpTo:@"wimmel" name:@"a..c" thePara:infoArray];    }
    không rõ ai có thể giúp mình phác thảo 1 cách đơn giản việc tạo delegate và bắt chúng trong Objective C ??

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Theo mình hiểu thì delegate trong Objective-C dùng để gọi 1 phương thức nằm trong 1 class khác hoàn toàn với class hiện tại.
    Ví dụ trong class B có phương thức

    Mã:
    //ClassB.m-(void)add:(int) a and: (int)b{a = a+b;}
    1 Class A không là subclass của B nhưng muốn gọi phuơng thức add:and: ở trong B.

    Ta thực hiện như sau:
    - định nghĩa 1 protocol chứa method add:

    Mã:
    //ClassA.h@protocol ClassADelegate-(int) add:(int) a and:(int) b;@end
    -khai báo 1 property kiểu id<ClassADelegate> cũng trong ClassA.h:
    Mã:
    @property (nonatomic, assign) id<ClassADelegate> delegate;
    -khai báo class B thực thi protocol ClassADelegate và tất nhiên phải implement method add:and: của protocol ClassADelegate trong ClassB.m:

    Mã:
    //ClassB.h@interface ClassB: NSObject<ClassADelegate>{...}...@end
    - sử dụng delegate để gọi method add

    Mã:
    //ClassA.mif (self.delegate && [self.delegate respondsToSelector:@selector(add:and:)]) // kiểm tra có tồn tại delegate và có responde tới method add:and: không{[self.delegate add:x and:y] // x,y là 2 biến kiểu int}
    Thực chất vấn đề là thông qua protocol (giống interface của java) để "liên lạc" giữa 2 class.
    ClassB có thể khai báo là kế thừa từ nhiều protocol...
    Mình biết nhiêu đó, có gì sai sót mong các pro bỏ quá cho ^^[IMG]images/smilies/18.gif[/IMG]

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •