gpt4 book ai didi

ios - 使用委托(delegate)协议(protocol)转发数据

转载 作者:行者123 更新时间:2023-11-29 03:07:25 27 4
gpt4 key购买 nike

我正在尝试使用委托(delegate)将数据从 viewA 转发到 viewB。我尝试使用委托(delegate)的原因是 viewB 是一个滑出菜单 - 我正在使用 SWRevealViewController 库来实现此功能。然而,作为一个副作用 - prepareForSegue 不会从 viewA 调用,因为它不拥有 viewB

因此,委托(delegate)似乎是前进的方向。

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

viewB 中 - 我添加了一个在发生平移手势时调用的方法 - 这会打开侧面菜单。

这就是我所做的:

viewA中我声明了协议(protocol):

@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"

遵守协议(protocol)

@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 从未被调用。我在这里做错了什么?

最佳答案

这段代码:

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

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

在本例中,这将使用滑动 View Controller 来获取前 View Controller 。

然而,在这种情况下,授权可能不是最好的方法,因为这种关系听起来是倒退的。您实际上只是在寻找 viewA 将一些数据传递给 viewB,并且当提供有关滑动 Controller 的信息(它已经拥有)时,它可以直接执行此操作。 viewA 也不一定总是在同一个地方,而 viewB 却是。

因此,只需获取 viewB 并直接向其发送消息即可:

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

(需要进行强制转换,因为这些方法返回父类(super class)指针,并且您需要调用子类特定方法,该方法适用于导航 Controller 和 View B Controller )

关于ios - 使用委托(delegate)协议(protocol)转发数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22610884/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com