在单独的文件(而不是ViewController中)中定义委托函数
我有一个ViewController和一个UIView。 UIView有一个委托,并在ViewController中设置委托函数。在单独的文件(而不是ViewController中)中定义委托函数
我想要做的就是在单独的文件中定义委托函数。所以UIView.m#输入单独的文件,而不是使用UIView的所有ViewController。
我相信这是一个标准程序,但不断下降,试图让它工作。 :|真的很感谢一些帮助。谢谢。
myViewController.h
#import <UIKit/UIKit.h>
#import "myUIView.h"
@protocol ModalViewDelegate
-(void)didReceiveMessage:(NSString *)message;
@end
@interface myViewController : UIViewController <ModalViewDelegate>
@property (nonatomic, strong) myUIView *myUIViewItem;
@end
myViewController.m
#import "myViewController.h"
#import "myUIView.h"
@interface myViewController()
@end
@implementation myViewController
@synthesize myUIViewItem;
- (void)didReceiveMessage:(NSString *)message { //<<< THIS IS WHAT
NSLog(@"Message from button: %@", message); //<<< NEEDS MOVING
}
- (void)viewDidLoad
{
…
myUIViewItem.delegate = self;
…
myUIView.h
#import <UIKit/UIKit.h>
@protocol ModalViewDelegate;
@interface myUIView : UIView {
id<ModalViewDelegate> delegate;
}
@property (nonatomic, strong) id<ModalViewDelegate> delegate;
myUIView.m
#import "myUIView.h"
#import "myViewController.h"
@implementation myUIView
@synthesize delegate;
...
[delegate didReceiveMessage:@"Data from UIView!"];
基于您的评论:
我希望有功能 'didReceiveMessage' 在一个单独的 文件中定义。所以我不必在每个使用UIView和委托的ViewController中重复它。例如ModalViewDelegate_Action.h和 ModalViewDelegate_Action.m
我给出的方法是使用一个子类,而对于我来说,这是伟大的工作。在我的iOS项目中,我有一个名为BaseViewController的类,它是UIViewController的一个子类。我在其中涉及到HUD管理,NSOperations管理等等很多代码。然后几乎所有的视图控制器都是它的子类。
感谢您的建议。如果我无法得到sree的建议,我可能会研究它。但我认为不建议子类化子类? –
你完全错了 - 你可以继续继承子类来继承超类的行为。在我的应用程序中,我有4个UIViewController子类 - BaseClass,一个表控制器类,然后是一个Pull-To-Refresh类(后者使我可以轻松地在多个地方采用PullToRefresh)。 –
4天后..非常感谢伟大的建议David H. Sree的解决方案最终没有帮助,但你的建议最有用。 –
好,有一个方法实际上,
就拿一个.h文件中,并让说connectionDelegate.h
,并宣布对协议的init
在connectionDelegate.h:
#import <UIKit/UIKit.h>
@protocol ConnectionDelegate
-(void)getResult:(NSString*)_result;
@end
然后在您的视图控制器中:
#import "ConnectionDelegate.h"
@interface myViewController : UIViewController <ConnectionDelegate>
{
id delegate;
}
然后在.m文件,仅通过调用该方法
[delegate getResult:_result];
编辑有关的警告:
您需要申报视图控制器的方法,你需要做这样的。
[self getResult:urlDataString];
-(void)getResult:(NSString*)_result{
[delegate getResult:_result];
}
你在做的方式看起来不错,你的问题是什么? – Charan
您是否想要在myUIView.m文件中实现'didReceiveMessage'函数.. – AppleDelegate
我想要在SEPARATE文件中定义函数'didReceiveMessage'。所以我不必在每个使用UIView和委托的ViewController中重复它。例如ModalViewDelegate_Action.h和ModalViewDelegate_Action.m –