这一切都是我的第一篇文章,我将尽可能准确.我已经阅读了很多关于iOS协议/委托实现的文章,但所有示例都失败了.假设我有A和B控制器,并希望将数据从A发送到BAh
@protocol exampleprot <NSObject>
@required
-(void) exampledmethod:(NSString *) e1;
@end
@interface ViewController
{
__weak id <exampleprot> delegate
}
Run Code Online (Sandbox Code Playgroud)
- 我试图推动一些程序
[delegate examplemethod:@"test"]
Run Code Online (Sandbox Code Playgroud)
BH
@interface test2 : UiViewcontroller <exampleprot>
Run Code Online (Sandbox Code Playgroud)
并在Bm实现方法 - (void)exampledmethod:(NSString*)e1;
那么我做错了什么?
基本上这是自定义委托的示例,它用于将消息从一个类发送到另一个类.因此,要在另一个类中发送消息,您需要先设置委托,然后在另一个类中使用协议.以下是示例: -
B.h 类
@protocol sampleDelegate <NSObject>
@required
-(NSString *)getDataValue;
@end
@interface BWindowController : NSWindowController
{
id<sampleDelegate>delegate;
}
@property(nonatomic,assign)id<sampleDelegate>delegate;
@end
Run Code Online (Sandbox Code Playgroud)
在B.m课堂上
- (void)windowDidLoad
{
//below only calling the method but it is impelmented in AwindowController class
if([[self delegate]respondsToSelector:@selector(getDataValue)]){
NSString *str= [[self delegate]getDataValue];
NSLog(@"Recieved=%@",str);
}
[super windowDidLoad];
}
Run Code Online (Sandbox Code Playgroud)
在A.h课堂上
@interface AWindowController : NSWindowController<sampleDelegate> //conforming to the protocol
Run Code Online (Sandbox Code Playgroud)
在A.m课堂上
//Implementing the protocol method
-(NSString*)getDataValue
{
NSLog(@"recieved");
return @"recieved";
}
//In this method setting delegate AWindowController to BWindowController
-(void)yourmethod
{
BWindowController *b=[[BWindowController alloc]init];
b.delegate=self; //here setting the delegate
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9174 次 |
| 最近记录: |