gpt4 book ai didi

iOS 无法从不同的 View Controller 向按钮添加操作

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:02:44 24 4
gpt4 key购买 nike

我有一个 ViewController 1,其中有一个按钮,它使用当前 View Controller 调用 ViewController 2。我已经向 ViewController 2 中的 Button 添加了一个 Action 。但是 Button 在单击时不会调用该操作。我的代码是:

显示ViewController 2:

- (void)viewDidLoad{
[super viewDidLoad];

ViewController2 * addShot = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];
[addShot.addShotButton addTarget:self action:@selector(submitShot:) forControlEvents:UIControlEventTouchUpInside];
}

- (IBAction)addShotButtonTapped:(id)sender{
[addShot setModalPresentationStyle:UIModalPresentationPopover];
[addShot setModalTransitionStyle:UIModalTransitionStyleCoverVertical];

UINavigationController * nav = [[UINavigationController alloc] initWithRootViewController:addShot];
[self presentViewController:nav animated:YES completion:nil];
}

一切正常,但 submitShot 操作 从未被调用。有什么建议吗?

最佳答案

像这样在 ViewController2.h 中添加协议(protocol)

@protocol  ViewController2Delegate <NSObject>

-(void) submitShotTapped;

@end

在你的@interface之前

并在您的界面中声明它的一个属性。

@property (weak, nonatomic) id<ViewController2Delegate> delegate;

始终为您的委托(delegate)使用weak属性。

在您的 submitShot 添加操作时,像这样调用此委托(delegate)方法

- (IBAction) submitShot:(id)sender {
[self.delegate submitShotTapped];
}

现在在你的 ViewController1 中像这样声明委托(delegate)

@interface TagDetails ()<ViewController2Delegate>

现在,在创建 ViewController2 的对象时,像这样将此委托(delegate)分配给 ViewController1 的自身

ViewController2 * addShot = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];
addShot.delegate = self;

然后像这样在 ViewController1 中实现该委托(delegate)方法

-(void) submitShotTapped {
//Shot button tapped on ViewController2
}

这是您可以使用委托(delegate)的方式,也可以删除您在按钮上添加的目标。

关于iOS 无法从不同的 View Controller 向按钮添加操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40738872/

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