2014-03-24 61 views
0

我试图使用委托将数据从viewA转发到viewB。我试图使用代理的原因是viewB是一个滑出式菜单 - 我正在使用此函数的SWRevealViewController库。但作为副作用 - prepareForSegue不从viewA调用,因为它不拥有viewB使用委托协议向前传递数据

因此,代表们似乎是前进的方向。

问题是我的委托方法没有被调用。

viewB - 我添加了一个方法,当平移手势发生时被调用 - 打开侧面菜单。

所以这是我做过什么:

viewA我宣布的协议:

@protocol firstViewControllerDelegate <NSObject> 
(void)sendData:(NSString *)string; 
@end 

宣布它像这样在viewA

@property (nonatomic, assign) id <firstViewControllerDelegate> delegate; 

然后在锅里手势viewA

-void)panGestureStarted:(UIPanGestureRecognizer *)gesture{ 

if (gesture.state == UIGestureRecognizerStateBegan){ 

    NSString *dataToPass = @"Test sending data to second view"; 
    [self.delegate sendData:dataToPass]; 

} 

然后在viewB

#import "viewAController.h" 

顺应了协议

@interface BBFilterViewController : UIViewController < firstViewControllerDelegate> 

然后在viewB.m

- (void)viewDidLoad{ 

[super viewDidLoad]; 


ViewAViewController *viewA = [[ViewAViewController alloc] init]; 
viewA.delegate = self;} 



-(void)sendData:(NSString *)string{ 
NSLog(@"Data from viewA %@",string);} 

的问题是在viewB .M的方法:-(void)sendData:(NSString *)string不会被调用。我在这里做错了什么?

回答

1

此代码:

ViewAViewController *viewA = [[ViewAViewController alloc] init]; 
viewA.delegate = self; 

创建的ViewAViewController一个新的实例,设置其delegate,然后摧毁它。而不是创建一个永远不会被使用的新实例(它的视图从不显示),您应该找到现有的实例并连接到该实例。

在这种情况下,这将使用滑动视图控制器来获得前视图控制器。

然而,在这种情况下,随着关系听起来倒退,代表团可能不是最好的方法。你真的只是寻找viewA来传递一些数据到viewB,它可以做到这一点,直接提供有关滑动控制器(它已经有)的信息。 viewA也不一定总是在相同的地方,而viewB是。

所以,只得到viewB,并直接发送消息给它:

ViewBViewController *viewB = (ViewBViewController *)[(UINavigationController *)self.revealviewControler.rightViewController topViewController]; 
[viewB ...]; 

(铸件需要,因为这些方法返回超类指针,你需要调用子类的具体方法,同时适用于净资产值是控制器和视图B控制器)

+0

感谢您的帮助。我如何找到现有的实例?由于viewAviewController不是前视图控制器 - 我的UITabBarController就像我希望菜单出现时整个tabbar移动屏幕一样。 – Tander

+0

那么'viewA'在哪里?最有可能你应该改变,以便viewA'将自己设置为'viewB'的委托或者只是一起移除委托(只需要'viewA'直接调用'viewB',因为'viewB'总是在视图中的相同位置控制器层次结构 – Wain

+0

viewA是我的UITabBarController的第二个选项卡viewA永远不会调用viewB它有self.revealViewController平移手势添加到它以便它揭示viewB我不确定viewB是viewA旁边我该如何检查?(还是iOS编程的新手,对于新手问题感到抱歉) – Tander