在单独的文件中定义委托函数(而不是在ViewController中)

时间:2012-09-27 12:49:08

标签: iphone ios xcode ios5

我有一个ViewController和一个UIView。 UIView有一个委托,委托函数在ViewController中设置。

我想做的就是在单独的文件中定义委托函数。所以UIView.m #imports单独的文件,而不是所有使用UIView的ViewControllers。

我相信这是一个标准的程序,但是为了让它发挥作用,我一直在努力。 :|非常感谢一些帮助。感谢。

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!"];

2 个答案:

答案 0 :(得分:2)

嗯,实际上有一种方法,

只需要一个.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];
}

答案 1 :(得分:1)

根据您的评论:

  

我希望在SEPARATE中定义函数'didReceiveMessage'   文件。所以我不必在每个ViewController中重复它   使用UIView和委托。例如ModalViewDelegate_Action.h和   ModalViewDelegate_Action.m

我获得的方式是使用一个子类,这对我来说非常有用。在我的iOS项目中,我有一个名为BaseViewController的类,它是UIViewController的子类。我在其中放了很多与HUD管理,NSOperations管理等相关的代码。然后几乎所有的视图控制器都是它的子类。