2

UINavigationController では、これは子コントローラーです

.h

@protocol childProtocol <NSObject>

-(void)childMethod:(NSArray*)params;

@end

@property (strong, nonatomic) id<childProtocol>childDelegate;

@property (weak, nonatomic) parentVC *pVC;

.m 

if([self.childDelegate respondsToSelector:@selector(childMethod:)]) {

    [self.childDelegate performSelector:@selector(childMethod:) withObject:self.arry];    

}

これは私の親コントローラーです

.m

-(void)childMethod:(NSArray *)params {
    // some work 
}

...

 childVC *cVC = [[childVC alloc]init];
    cVC.pVC = self;

しかし、 childMethod: が呼び出されていないので、インターネットで検索して、この投稿 UINavigationControllers: How to pass value to higher (parent?) controller in stack? を取得しました。

弱い参照を作成しようとしましたが、デリゲートが子から親にデータを渡す方法がわかりませんか?

4

3 に答える 3

2

これは子controller.hです

@protocol childProtocol <NSObject>
    -(void)childMethod:(NSArray*)params;

@end

@property (strong, nonatomic) id<childProtocol>childDelegate;

@property (weak, nonatomic) parentVC *pVC;

.m

if([self.childDelegate respondsToSelector:@selector(childMethod:)]) {

    [self.childDelegate performSelector:@selector(childMethod:) withObject:self.arry];    

}

これは私の親コントローラーです.h

#import <UIKit/UIKit.h>
#import "ChildController.h"


@interface perentController : UIViewController < childProtocol >

.m

- (void)childMethod:(NSArray *)params {
        // some work 
}

編集済み:

そして、オブジェクトchildViewOBJ.childDelegate = self;の作成時に追加することを忘れないでください。ChildViewController'sそのような、

childVC *cVC = [[childVC alloc]init];
cVC.childDelegate = self;
cVC.pVC = self;
[self presentModalViewController:cVC animated:YES];

プロトコルの作成/使用方法の詳細については。

于 2013-06-20T04:28:58.793 に答える