1

我有一个 ViewController 和一个 UIView。UIView 有一个委托,委托功能是在 ViewController 中设置的。

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

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

我的视图控制器.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

我的视图控制器.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;
…

我的UIView.h

#import <UIKit/UIKit.h>
@protocol ModalViewDelegate;
@interface myUIView : UIView {
    id<ModalViewDelegate> delegate;
}
@property (nonatomic, strong) id<ModalViewDelegate> delegate;

我的UIView.m

#import "myUIView.h"
#import "myViewController.h"
@implementation myUIView
@synthesize delegate;
...
[delegate didReceiveMessage:@"Data from UIView!"];
4

2 回答 2

2

嗯,实际上有一种方法,

只需获取一个 .h 文件,然后说connectionDelegate.h并声明您的协议初始化

在 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];
}
于 2012-09-27T13:17:08.423 回答
1

根据您的评论:

我想在单独的文件中定义函数“didReceiveMessage”。这样我就不必在每个使用 UIView 和委托的 ViewController 中重复它。例如 ModalViewDelegate_Action.h 和 ModalViewDelegate_Action.m

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

于 2012-09-27T13:32:02.503 回答