gpt4 book ai didi

ios - 解雇 Controller 后未调用委托(delegate)

转载 作者:行者123 更新时间:2023-11-29 01:53:33 29 4
gpt4 key购买 nike

我有一个 Controller A,还有一个 UIButton,单击它我将呈现一个新的 Controller B。但问题是 Controller B 首先嵌入了 NAV。所以最终我将介绍 UINavigationController。

现在 Controller B 中有一个 UIButton, Controller 将在该按钮上关闭,并且应将委托(delegate)传递到 Controller A 并附带一些消息

Controller 一个 UIButtonCode

- (IBAction)summaryButtonClick:(id)sender {

UIStoryboard* storyBoard=[UIStoryboard storyboardWithName:@"Main" bundle:nil];

UINavigationController* summaryVC=[storyBoard instantiateViewControllerWithIdentifier:@"SummaryNavVC"];

[self presentViewController:summaryVC animated:YES completion:nil];
summaryVC=nil;

}

现在 Controller B .h文件

 #import <UIKit/UIKit.h>
@protocol SummaryViewWhatsNewDelegate <NSObject>
@required
- (void) SummaryViewWhatsNew:(NSString*)title;
@end
@interface SummaryViewController :
UIViewController<UITableViewDataSource,UITableViewDelegate>
{
id <SummaryViewWhatsNewDelegate> _delegate;
}
@property (nonatomic,strong) id delegate;

@property (weak, nonatomic) IBOutlet UITableView *summaryTableView;
- (IBAction)closeSummaryView:(id)sender;

@end

.m

//Button Click 
[self dismissViewControllerAnimated:YES completion:^{
[_delegate SummaryViewWhatsNew:@"Sales Triggers Filter"];
}];

我已经在我的 Controller A中实现了委托(delegate).h

@interface ControllerA : UIViewController<SummaryViewWhatsNewDelegate>

Controller A的.m

#pragma mark -ControllerB Delegate
-(void)SummaryViewWhatsNew:(NSString *)title{
NSLog(@"Delegate Called");
}

在这种情况下,我知道我没有提供 delegate.self 部分,因为我呈现的是 NAV Controller 而不是 Controller B

所以我在 viewDidLoad 和 Controller *B 中创建了一个对象,并将委托(delegate)设置为 self。但它不起作用,并且从未调用委托(delegate)

另一方面,如果我只呈现没有导航的 Cntroller B,并且在呈现之前保留 b.delegate=self,则它可以工作。

另一个替代方案可以是触发通知。但我想与委托(delegate)一起工作。

有什么方法可以调用由 Nav 嵌入所呈现的 View Controller 的委托(delegate)吗?任何帮助将不胜感激。

最佳答案

好吧,我得到了答案我们必须从 NAV 中获取 Controller 对象

在我演示的地方,我只需要添加这些行就可以了

UIStoryboard* storyBoard=[UIStoryboard storyboardWithName:@"Main" bundle:nil];

UINavigationController* summaryVC=[storyBoard instantiateViewControllerWithIdentifier:@"SummaryNavVC"];

//Add These lines in order to get the object of Controller B.
// SummaryViewController is my Controller B

SummaryViewController* summary=[[summaryVC viewControllers] objectAtIndex:0];
summary.delegate=self;
[self presentViewController:summaryVC animated:YES completion:nil];

它成功了。

关于ios - 解雇 Controller 后未调用委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31138611/

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