• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 通过导航 Controller 时丢失指向委托(delegate)的指针

[复制链接]
菜鸟教程小白 发表于 2022-12-13 14:27:56 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我不完全确定如何解释我的问题,但我会尝试。

所以我一直在尝试学习如何使用委托(delegate)和协议(protocol),但遇到了问题。我有一个协议(protocol):ButtonInPopOverWasPressed,只有一种方法:

   - (void)buttonWasPressedNSString *)buttonValue;

我还有一个主视图 Controller 和一个带有属性的自定义弹出框类:

   @property (retain, nonatomic) id <ButtonInPopoverWasPressed> delegate;

在我的主视图 Controller 中,我有一个按钮和一个文本标签。当按下按钮时,它会转到正常的弹出窗口。然后我将 segue.destinationViewController 的委托(delegate)分配为主视图 Controller ,如下所示:

   [segue.destinationViewController setDelegate:self];    

Then when a button from the popover is selected it is displayed in the main view's text label by calling a protocol method that the main view listens for:

   [self.delegate buttonWasPressed:sender.currentTitle]; // sends the title of the button pressed to the delegate

这一切都很好。当我想在按下按钮而不是将信息发送回主视图时将弹出框转换到不同的 View 时,我的问题就开始了。但是当我创建一个导航 Controller 作为弹出框并将关系设置为旧弹出框时,一切都崩溃了。

当我分配 segue 的委托(delegate)(如上所示)时,它在另一边显示为 null,因此我完全失去了将其传递给其他 subview 并将信息返回到主视图的能力。导航 Controller 会吸收委托(delegate)吗?如何让委托(delegate)通过 NC 获得实际 View ?

我知道这是协议(protocol)和委托(delegate)的基础知识,但我环顾四周,似乎永远找不到适合我的答案。



Best Answer-推荐答案


试试下面的代码。

    NSArray *temp = [[segue destinationViewController] childViewControllers];
    PopoverViewController *popoverViewController = (PopoverViewController)[temp objectAtIndex:0];
    popoverViewController.delegate = self;

关于ios - 通过导航 Controller 时丢失指向委托(delegate)的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11250385/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap