容器视图控制器 - 通知父级操作

2023-11-22

假设我有一个自定义容器视图控制器(MainViewController),我在其中执行如下操作:

- (void)viewDidLoad
{
    [super viewDidLoad];        

    HomeViewController *homeVC = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
    [self addChildViewController:homeVC];
    [self.view addSubview:homeVC.view];

}

HomeViewController 将有一个按钮,例如“go”,按下该按钮将需要前进到下一个视图控制器。所以我需要将此操作通知 MainViewController。做这个的最好方式是什么?

我使用自定义容器是因为我需要在视图控制器之间进行自定义转换。当按下“go”时,HomeViewController 上的一些视图将进行动画处理,同时新视图控制器中的视图将进行动画处理。

显然,我可以为 HomeViewController 提供一个 MainViewController 类型的属性,并以这种方式进行调用,但我希望容器视图控制器 API 有一种更简洁的方法。


您可以使用委托或块;

使用委托

创建协议:

@protocol SomeProtocol <NSObject>
- (void)someAction; 
@end 

只需在 HomeViewController.h 中声明一个委托,如下所示:

id<SomeProtocol> delegate; 

然后在 MainViewController 的 viewDidLoad 中设置如下:

homeVC.delegate = self;
//some where in MainViewController implement the protocol method
-(void)someAction
{
    //do something
}

然后当你按下 homeVC 中的按钮时,只需调用:

if ([self.delegate respondsToSelector:@selector(someAction)]) {
    [self.delegate someAction];
}

使用块:

在 HomeViewController.h 中声明一个块属性:

typedef void (^ActionBlock)();

@property (nonatomic, copy) ActionBlock block;

然后在 MainViewController ViewDidLoad 中:

homeVC.block = ^(){
    //do something
};

然后当你按下 homeVC 中的按钮时,只需调用:

self.block();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

容器视图控制器 - 通知父级操作 的相关文章

  • 以弯曲格式显示文本

    我正在寻找以曲线格式绘制一些文本 我使用哪个控件并不重要 UITextField UILabel or UITextView 我只想显示如图所示的文本 仍在寻找解决方案 请帮忙 查看此链接 https nodeload github com
  • UITableView 滑动删除 iOS 上的手势冲突

    我的手势识别器有问题 我的目标是在表视图中实现使用滑动删除 但我认为其他手势是相互冲突的 我正在使用这个库romonthego REFrostedViewController https github com romaonthego REF
  • ios 在后台处理推送通知

    我想保存应用程序处于后台状态时到达的推送通知 我知道关于 void application UIApplication application didReceiveRemoteNotification NSDictionary userIn
  • XCode 4.5 给我“SenTestingKit/SenTestKit.h”文件未找到,但适用于 4.4.1

    我刚刚安装了 XCode 4 5 它在我现有的项目之一上给了我一个 SenTestingKit SenTestingKit h 文件未找到错误 此错误仅发生在 XCode 4 5 中 但它在 4 4 1 上编译正常 我已经检查过SenTes
  • 将 UIButton 中的图像缩放到 AspectFit?

    我想将图像添加到 UIButton 并且还想缩放图像以适合 UIButton 使图像变小 请告诉我该怎么做 这是我尝试过的 但它不起作用 将图像添加到按钮并使用setContentMode self itemImageButton setI
  • iOS 视图控制器内存在被关闭后未释放

    当用户单击按钮时 它会显示一个带有两个视图控制器的新选项卡栏视图控制器 我是这样做的 ACLevelDownloadController dvc ACLevelDownloadController alloc initWithNibName
  • iOS 电池监控 Swift

    我已将监控设置为启用 但模拟器和设备中的电池电量仍然为 1 UIDevice currentDevice batteryMonitoringEnabled true var level UIDevice currentDevice batt
  • iOS - 当 UIView 移动时将 UITextField 移动到不同的位置

    我有一个主 UIView 它通过开关向上移动 我有这个工作 那里没有问题 现在 UIView 当向下时 占据屏幕的大约一半 当它向上推时 它会显示底部 40px 在 UIView 中 当它处于向下状态时 它有一个 UITextField 并
  • Swift Codable 将空 json 解码为 nil 或空对象

    这是我的代码 class LoginUserResponse Codable var result String var data LoginUserResponseData var mess String public class Log
  • 在 SwiftUI 中使用分段式选取器在两个页面之间滑动

    我有一个Picker with pickerStyle SegmentedPickerStyle 使其成为分段控件 我想让页面在之间平滑滑动 而不是使用条件语句替换视图 这是我迄今为止所做的 gif 这是到目前为止的代码 由if 而不是在不
  • 如何恢复消耗品应用内购买?

    我正在开发一款 iOS 游戏 用户可以通过应用内消耗品购买一定数量的内部货币 比如 1000 金币 如果用户想将余额从一台设备转移到另一台设备 如何恢复消耗品购买 在苹果的文档中 它说我们必须使用我们自己的服务器 但是如何获取用户的Appl
  • 检测 AvPlayer 何时切换比特率

    在我的应用程序中 我使用 AVPlayer 通过 HLS 协议读取一些流 m3u8 文件 我需要知道在流会话期间 客户端切换比特率多少次 我们假设客户端的带宽正在增加 因此客户端将切换到更高比特率的段 AVPlayer能检测到这个开关吗 T
  • 我的游戏中应该有多少个视图控制器?

    我开始使用 spritekit 构建我的第一个游戏 现在我只有一个视图控制器来呈现开始屏幕场景 override func viewDidLoad super viewDidLoad let scene StartScreenScene C
  • 频繁绘制 CGPath 时的性能

    我正在开发一个将数据可视化为折线图的 iOS 应用程序 该图被绘制为CGPath在全屏自定义中UIView最多包含 320 个数据点 数据经常更新 图表需要相应地重新绘制 刷新率为 10 秒就很好了 到目前为止很容易 然而 我的方法似乎需要
  • iOS 循环对象的属性并添加操作

    我有一个具有几个类似属性的类 UISliders 我想添加用户开始和结束使用每个滑块时的操作 每个滑块都将链接到同一个选择器 因此我考虑只是迭代它们 而不是编写 10 个几乎相同的代码块 问题是 最有效的方法是什么 我尝试过这样的事情 在运
  • 在现有 iOS 应用程序中集成 React-native(0.40.0) 后找不到 Yoga/Yoga.h 头文件

    在我的 Swift iOS 应用程序中集成 React Native 后 我无法构建 yoga Yoga h file cannot be found 我已经浏览了文档 查看了react native github页面 检查了类似问题的SO
  • UIWebView Bug:-[UIWebView cut:]:无法识别的选择器发送到实例

    In the UIWebView 如果包含文本的输入元素具有焦点 并且按下按钮导致输入失去焦点 则随后双击输入以重新获得焦点并从出现的弹出栏中选择 剪切 或 复制 或 粘贴 会导致这UIWebView因错误而崩溃 UIWebView cut
  • RemoteIO 音频单元播放回调中的 AudioBufferList 内容

    我想 拦截 音频数据传送到 iOS 设备扬声器的过程 我相信这可以使用 RemoteIO 音频单元和回调来完成 在下面的playbackCallback中 ioData实际上包含任何音频数据吗 static OSStatus playbac
  • 苹果推送通知在生产中不起作用

    我们完全陷入困境 请帮忙 我和我的团队制作了一个 iPhone 应用程序 这是我们第一次在 iOS 上尝试 一切都很好 直到我们提交应用程序并在应用程序商店上可用为止 推送通知服务无法正常工作 我在网上搜索并尝试根据人们的建议仔细检查我们的
  • 为什么使用 iPhone 或 iOS 设备在“iframe”中查看“position:fixed”时不起作用?

    我研究过 stackoverflow 似乎position fixed在 iOS 移动设备的 iframe 中 https stackoverflow com questions 15874910 position fixed and if

随机推荐

  • 如何在 Swift 中创建独特的形状或 UIView

    我真的没有任何关于 Swift 绘图的知识 但我希望创建与正方形略有不同的应用程序背景的一部分 请参阅下图了解我正在尝试制作的内容 这个想法是 这将位于屏幕的顶部 只不过是一个背景 它会延伸到屏幕的一半 然后 我将在顶部添加图像等 我需要正
  • django table2 创建带有链接的额外列

    我试图在我的一个表中添加一个额外的列 这会将 url 添加到另一个页面 我的桌子 class ItemTable tables Table edit tables LinkColumn item edit args A pk class M
  • 复制构造函数还是 = 运算符?

    class Foo Foo f Foo g f 我的问题是 标有 的行中正在调用什么 它是默认的复制ctr还是 运算符吗 我的问题是 标有 的行中正在调用什么 它是默认的复制ctr还是 运算符吗 将调用复制构造函数 尽管 正在使用标志 这是
  • 什么会导致 python 模块被导入两次?

    据我了解 python 模块永远不会导入两次 即模块中的代码仅在第一次导入时执行 后续的 import 语句只是将模块添加到导入范围 我有一个名为 TiledConvC3D py 的模块 但它似乎被导入了多次 我使用 pdb 在该模块的代码
  • 如何比较 python 中的 Rpm 版本

    我试图找出如何比较 RPMS 当前安装 和 在本地存储库中可用 的 2 个列表 并查看哪些 RPMS 已过期 我一直在修改正则表达式 但是 RPMS 有很多不同的命名标准 我无法找到一个好的列表来使用 我的驱动器上没有实际的 RPMS 所以
  • Node.js - require 未定义异常[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我是一名完全的 Node js 新手 正在努力学习基础
  • 嵌套 ifelse 语句

    我仍在学习如何将 SAS 代码转换为 R 并且收到警告 我需要明白我在哪里犯了错误 我想做的是创建一个变量来总结和区分人口的三种状态 大陆 海外 外国人 我有一个包含 2 个变量的数据库 身份证国籍 idnat 法国人 外国人 If idn
  • 当用户滚动到页面“附近”底部时加载更多内容?

    我用它来检测滚动到页面底部 但是如何检测距页面底部的距离呢 if window scrollTop window height document height my ajax here 我的意思是我希望该函数在距离底部 100 像素或 20
  • 将秒转换为天、分钟和秒

    我已经设置了将秒转换为天 分钟和秒格式的 挑战 例如 31600000 365 天 46 分钟 40 秒 using namespace std const int hours in day 24 const int mins in hou
  • 是否可以在“某处”添加一个 `before(:each)` 挂钩,以便所有规范文件都可以运行它?

    我正在使用 Ruby on Rails 3 2 2 和 rspec rails 2 8 1 为了制作我的规格文件DRY 不要重复自己 并播种test数据库我想运行一个before each 挂钩所有这些规范文件 也就是说 在我的所有规范文件
  • 一种更Pythonic的迭代列表的方法,同时在每次迭代中排除一个元素

    我有以下代码 items one two three for i in range 0 len items for index element in enumerate items if index i do something with
  • 如何使用 javascript 获取重定向 url?

    我在使用我正在使用的自动化工具显示带有重定向的网址时遇到问题 因此我考虑在打开弹出窗口之前先检查重定向的网址 是否可以使用 javascript 获取重定向 URL 没有 jquery 或其他 js 框架 因为该工具不支持此功能 Thank
  • Linux命令以树的形式打印目录结构

    是否有任何我可以从 Bash 脚本调用的 linux 命令 该命令将以树的形式打印目录结构 例如 folder1 a txt b txt folder2 folder3 这就是您要找的吗tree 它应该存在于大多数发行版中 也许作为可选安装
  • 我可以假设 sizeof(uint8_t) = 1 吗?

    我有一个程序 对 uint8 t 数组使用动态分配 我可以安全吗 假设它的长度总是一个字节 If uint8 t存在 那么sizeof uint8 t 必须是 1 uint8 t is required宽度恰好为 8 并且没有填充位 并且C
  • 使用 browserify 填充 jQuery 插件

    您好 我正在使用 grunt browserify 任务来设置我的代码 我已经在 jQuery 中进行了填充 现在我正在尝试包含 jquery tablesorter jquery插件可以这样与browserify一起使用吗 shim jq
  • PerformSelector:withObject:afterDelay:无法从scrollViewDidZoom工作

    我觉得我应该知道这一点 但我已经被难住了好几个小时 而且我已经没有想法了 原理很简单 用户使用捏合操作来操纵滚动视图中的缩放和定位 如果他们捏捏的时间很短 那么滚动视图就会记录缩放级别和内容偏移量 所以我想我应该在scrollViewDid
  • 类的 mro 方法和 __mro__ 属性有什么区别?

    我偶然发现了这个额外的 无下划线的mro我使用时的方法 metaclass abc ABCMeta 似乎是一样的 mro 只是它返回一个列表而不是元组 这是一个随机示例 创意片段 import abc import copy class L
  • 如何在 Ruby 中临时重定向 stderr?

    我想在一个块的持续时间内临时重定向 Ruby 脚本中的 stderr 确保在块结束时将其重置为其原始值 我很难在 ruby 文档中找到如何做到这一点 在红宝石中 stderr指的是输出流目前使用的作为标准错误 而STDERR is the
  • 如何使用 OnItemClick 从列表视图中检索单击的字符串?

    我这里有一些问题 它看起来很简单 我一直在寻找它的解决方案 不幸的是 我找不到任何东西 这是我的问题 我想做的是从项目单击方法中获取列表视图中显示的字符串 这是我的列表视图 lol hi waw 当我单击 lol 时 我想获取 lol 字符
  • 容器视图控制器 - 通知父级操作

    假设我有一个自定义容器视图控制器 MainViewController 我在其中执行如下操作 void viewDidLoad super viewDidLoad HomeViewController homeVC HomeViewCont