1

ViewController と UIView があります。UIView にはデリゲートがあり、デリゲート関数は 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!"];
4

2 に答える 2

2

まあ、実際には1つの方法がありますが、

.h ファイルを 1 つ取りconnectionDelegate.h、プロトコルの初期化を宣言してみましょう

connectionDelegate.h では:

     #import <UIKit/UIKit.h>  
     @protocol ConnectionDelegate
     -(void)getResult:(NSString*)_result;
     @end

次に、View Controller で次のようにします。

 #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' を SEPARATE ファイルで定義したいと考えています。UIView とデリゲートを使用するすべての ViewController でそれを繰り返す必要がないようにします。例: ModalViewDelegate_Action.h および ModalViewDelegate_Action.m

私が与えられた方法は、サブクラスを使用することでしたが、それは私にとってうまく機能しています。私の iOS プロジェクトには、UIViewController のサブクラスである BaseViewController というクラスがあります。HUD管理、NSOperations管理などに関連する多くのコードをそこに入れました。その後、事実上すべてのView Controllerはそのサブクラスです。

于 2012-09-27T13:32:02.503 に答える