2014-10-08 57 views
0

我在使用委托方法时遇到困难。delagate不能在2个视图控制器之间工作

我有2个观点。在视图A中,我使用委托来说我按下了一个按钮来查看B. 视图B很好地收到了消息。 我想发送一条消息说,视图B已收到消息。

因此,从A代表到B代表我的代表工作,但B到A不工作。

.h: 

#import <UIKit/UIKit.h> 


    @protocol ButtonProtocolName <NSObject> 
    - (void)toucheEnter:(id)sender;  
    @end 

    @interface ClavierKsViewController : UIViewController 
    @property (nonatomic, assign) id <ButtonProtocolName> delegate; 
    @end 


.m 
#import "ClavierKsViewController.h" 

@interface ClavierKsViewController() 

@end 

@implementation ClavierKsViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(IBAction)toucheEntreeClavier:(id)sender{ 
    [self.delegate toucheEnter:sender]; 
} 
@end 

现在来看了Bh:

#import "ClavierKsViewController.h" 
@interface CaisseViewController : UIViewController<ButtonProtocolName> 
@property (nonatomic,retain) ClavierKsViewController *clavierKsView; 

BM

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
clavierKsView = [self.storyboard instantiateViewControllerWithIdentifier:@"clavierKsView"]; 

    clavierKsView.delegate=self; 
} 

-(void)toucheEnter:(id)sender{ 
    NSLog(@"valider"); 
    } 

在这个意义上它的工作原理 当我创建从视图B中的委托基于同样的方式查看A在,我仍然得到相同的消息:找不到委托人的协议声明

+0

您是否尝试从CaisseViewController发送消息到'ClavierKsViewController'?因此'CaisseViewController'持有'ClavierKsViewController'的实例,你可以发送消息到'ClavierKsViewController'而不是创建另一个委托。 – 2014-10-09 01:18:05

+0

如何发送消息? – 7eleven 2014-10-09 01:46:33

+0

像往常一样['claverKsView someMessage]' – 2014-10-09 01:47:28

回答

0

协议无法工作可能是由循环依赖造成的。解决方法是将协议解压缩到另一个.h如“ButtonProtocolName.h”,并在a.h和b.h中导入协议。

相关问题