如何在 Objective C 中向超级视图发送消息

2024-01-29

我是 Objective C 和 Cocoa 的新手。我只是不明白如何向 UIView 的超级视图发送消息。我无法让它发挥作用。这是我到目前为止所尝试的:

在我的 MainView 中,我有一个名为 ResetDrawType 的方法:

- (void) resetDrawType {
   self.drawType = foo;
}

另外,在 MainView 中,我创建一个子视图并将其添加到 MainView 中:

mySubView *mySubView = [[mySubView alloc] initWithFrame:CGRectMake(foo, foo, foo, foo)];
[self addSubview:mySubView];
[mySubView release];

然后,当子视图完成绘制时,我想将消息resetDrawType发送到其超级视图,即MainView。

我试过这个

 [(MainView*)[self superview] resetDrawType];

and

 [(MainView*)self.superview resetDrawType];

……什么不起作用。我了解了非正式协议,所以我将此代码添加到 MainView.h

 @interface NSObject ( resetters )
    - (void) resetDrawType;
 @end

但还是什么都没有。 接下来我发现了这个选择器的事情并在子视图中尝试了这个:

 if ([self.superview respondsToSelector:@selector(resetDrawType:)])
    [self.superview performSelector:@selector(resetDrawType) withObject:nil];

它也不起作用。我究竟做错了什么?感谢您的帮助。


你不应该让子视图告诉它的超级视图任何事情。您应该使超级视图成为您的视图类的委托。

// MainView
MyView *myView = [[MyView alloc] initWithFrame:CGRectMake(...) delegate:self];

然后将委托保存到声明的实例变量中id delegate。当你完成绘图时:

// MyView
- (void)doDrawing {
  drawStuff();
  [delegate didFinishDrawingView:(MyView *)self]
}

现在回到你的 MainView 中,实现这个方法

- (void)didFinishDrawingView:(MyView *)aView;

做你想做的事。

所有这一切的要点是,应用程序边缘的小类(如小子视图)不需要知道它们上面的大类是如何工作的。此设置允许视图在链上进行通信,但使用传达其自身状态的消息,而不是指示其他对象执行特定操作的消息。这就是 Cocoa 的结构方式,以便可以轻松地重用类,并且可以根据需要重新调整其事件的用途。

您的超级视图应该知道当其子视图完成时要做什么。子视图应该让人们知道它已经完成。


在子视图类的标头中声明一个实例变量,如下所示:

id delegate;

为子视图类编写一个初始化程序,如下所示:

- (id)initWithFrame:(CGRect)frame delegate:(id)aDelegate {
  [super initWithFrame:frame];
  delegate = aDelegate;
  return self;
}

现在您有了一个初始化程序,它将接受委托,保存该委托,并允许您调用它的方法。

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

如何在 Objective C 中向超级视图发送消息 的相关文章

  • iOS:调用 Objective-C 方法的处理开销是多少?

    我正在编写一些实时音频处理代码 该代码将在音频单元的渲染回调中执行 该线程处于系统识别的最高优先级 Apple 指示最大限度地减少此调用中进行的处理量 他们的建议之一是避免 Objective C 方法调用 But why 调用 Objec
  • 从视频创建缩略图 - 提高速度性能 - AVAsset - iPhone [重复]

    这个问题在这里已经有答案了 我正在使用基于以下线程中的代码的代码来生成视频缩略图 从 iPhone SDK 中的视频 URL 或数据获取缩略图 https stackoverflow com questions 1347562 gettin
  • 当我从我转向的视图控制器返回时,为什么我的 UITableView 的格式完全出错了?

    我有一个UITableView使用自定义单元格 其中有一些标签可以动态决定单元格的高度 当我点击一个单元格并转到一个新的视图控制器时 返回后所有单元格的格式完全混乱 我无法弄清楚是什么导致了它 这是细胞通常的样子 我对它们设置了一些非常基本
  • Objective-C:在哪里定义宏以便随处可用?

    我有一个 iOS 应用程序 它在许多视图控制器中使用相同的字符串 数字等 所以我认为最好在一个文件中定义这些常量并在所有视图控制器实现中使用它 优点是更改一个数字 我只需要做一次 而不是在所有视图控制器中都使用该数字 实际上 我的 h 文件
  • NSDictionary 上的 NSPredicate

    我试图根据字母表在表格视图中创建部分 并在这些部分下按字母顺序对我的条目进行排序 我已经收集了 bandArrayIndex 中 bandArray 每个条目的第一个字母 现在我尝试使用 NSPredicate 来计算每个字母有多少个 我正
  • 将第 3 方库 ZXing 导入 Xcode

    我尝试了多种方法将第 3 方库 ZXing 导入我的 iOS 应用程序 但所有方法都很痛苦 或者根本不起作用 如果有人可以建议我做错了什么 或者提出导入 ZXing 等库的更好方法 我将非常感激 一定比这个容易 这就是我所做的 结果是 My
  • 如何使用 iPhone SDK 实现可滑动的图像堆栈(例如照片应用程序)?

    我想获取一堆图像 或者可能是一组用于下载图像的 URL 并以全屏方式显示它们 一次一个 使用 iPhone SDK 使用用户滑动来平滑地为堆栈中的下一个图像设置动画 Apple 的 Photo app 似乎可以做到这一点 此外 如果尚未检索
  • 在横向中自动调整 UITableCells 内容的大小

    在 UITableView 中 我通过 UILabels 将内容添加到单元格中 定义最佳尺寸 与单元格宽度允许的一样大 我注意到只有tableView contentSize width是可靠的 因为cell contentView bou
  • 如何在 iOS 9 上可靠地检测是否连接了外部键盘?

    在 iOS 9 之前 确定是否连接外部键盘的最可靠方法是监听UIKeyboardWillShowNotification并使文本字段成为第一响应者 如中所述这个问题 https stackoverflow com questions 289
  • 在 OS X 上创建和使用静态库

    好的 我正在尝试创建一个 Cocoa 库 静态 并使用 但我不断收到错误 我创建了一个超基本的静态库 TSXLib 其中仅包含一个额外的类 import
  • 覆盖层不与 UITableView 一起滚动 - iOS

    我有一个 UITableView 类 它使用以下方法在转到下一个屏幕时调用加载覆盖 问题是这个加载屏幕不随列表滚动 所以如果你滚动一点并单击某些东西 加载屏幕不会显示 因为它位于顶部 如何让加载屏幕始终保持在 UITableView 的顶部
  • Objective-C – 拥有包含 TestFlight SDK 的 TestFlight 配置

    我已按照 TestFlight 的说明复制 发布 配置 我还使用 TestFlight SDK 从我的应用程序获取实时报告 通过这样做 我必须在我的应用程序中包含一些 TestFlight 代码 当然 我不想在我的应用程序的发布版本中包含此
  • 推送动画,没有阴影和停电

    我有一个简单的iOS NavigationController基于应用程序 二UICollectionViews 相继 如果元素打开 第一个合集 被点击时 第二集 将被打开 非常简单 重要的提示 Both UICollectionViews
  • UIPanGestureRecognizer 对坐标的限制

    我在主 UIView 中添加了一个子视图 称为panel 并且我向其中添加了gestureRecognizer 因为我希望它只能在Y轴上拖动并且只能在某些限制下 即160 300 超过300它不能拖动 我以这种方式实现了手势处理 IBAct
  • UIImageJPEGRepresentation 在视网膜显示屏上提供 2x 图像

    我有这段代码 它创建一个图像 然后向其添加一些效果并缩小其大小以使其largeThumbnail UIImage originalImage UIImage imageWithData self originalImage thumbnai
  • PFQueryTableViewController 错误

    我正在遵循在线教程 使用 Parse 作为后端创建照片共享应用程序 我已经运行了两次教程 两次都从头开始创建应用程序 但在同一位置仍然出现相同的错误 我到处寻找解决方案 但仍然没有运气 我正在使用 PFQueryTableViewContr
  • 如何在 NSTextView 中使用 SPACE 而不是 TAB

    我只知道如何修改 NSTextView 中的制表符宽度 NSMutableParagraphStyle paragraphStyle self defaultParagraphStyle mutableCopy paragraphStyle
  • ABAddressBookCopyArrayOfAllPeople 中缺少联系人

    我试图从我的应用程序中的地址簿中查找电话号码 但很惊讶没有找到它 问题是 我已经在我的应用程序访问的控制台中打印了地址簿的所有号码 奇怪的是 有些联系人丢失了 我正在将输出与我的地址簿进行比较 虽然数量很少 但仍然如此 这就是我访问地址簿的
  • 未知异常和崩溃

    当我尝试快速滚动表格视图或从远程重新加载数据时 我的应用程序崩溃了 当我先进行远程获取然后滚动表格视图时 一切似乎都工作正常 我不知道下面的崩溃日志意味着什么 它只是有时工作正常 有时崩溃 Incident Identifier 710A1
  • UITabBarController 为 TabBar 的每个 ViewController 提供不同的 Storyboard 文件

    我的团队正在开发一个具有 UITabBarController 的应用程序 我们正在使用 Storyboard 来开发界面和流程 由于我们是一个团队 所以我们不能将所有流程放在一个故事板中 因为这会导致与 SVN 同步出现问题 所以 解决方

随机推荐

  • Git:如何使用多个存储库?

    我有一个远程只读 git 存储库A 我已将其克隆到本地文件系统中 A定期更新 每次更新后我都会将更新的代码拉取并合并到我的系统中 我想与我的团队成员就以下文件进行协作A 为此 我创建了一个新的远程存储库B 我如何管理同步B与我的本地存储库
  • 避免在终端/cmd 上运行 FFmpeg

    I m using FFmpeg for a small project so I built a GUI basic application for video editing here is the image 一切工作正常 但我只是想
  • 如何使用 WPF 将文本换行到标签中?

    我有一个TextBox和一个标签 单击按钮后 我执行以下代码 label1 Content textbox1 Text 我的问题是 如何启用标签的文本换行 一行上可能显示太多文本 如果是这种情况 我希望它自动换行为多行 The Label控
  • 如何将 CSRF 令牌从服务器传递到客户端?

    这听起来可能是一个愚蠢的问题 我想澄清这一点 如果首先将令牌发送给客户端并且客户端发回相同的令牌 csrf 令牌如何帮助识别跨站请求 恶意客户端不会得到服务器的响应吗 如果我们在发送令牌时检查来源 那么令牌检查的事情是不是显得多余 我们如何
  • ASP.NET MVC 如何在布局中使用 Partial View?

    我需要使用部分视图在布局中渲染菜单 如果有更好的方法 请告诉我 我这样做 在布局中 if User IsInRole Admin Html Partial AdminMenu 我在控制器中这样称呼它 public ActionResult
  • 从 xarray 数据集中的某些变量中删除维度

    我有一个 xarray 数据集 其中某些变量的维度超出了必要的维度 例如 纬度 和 经度 变量也随时间变化的 3D 数据集 如何删除多余的尺寸 例如 在下面的数据集中 bar 是沿x and y轴 沿轴具有恒定值x轴 我该如何删除x尺寸来自
  • 从html标签中提取信息到pandas中

    我有一个充满 html 文件的文件夹 我试图选择正确的 html 标签 以便正确打印引文 并且我需要的输出只是出版号和标题 到目前为止 我在 SO 中各个帖子的帮助下做到了这一点 with open filename r encoding
  • 根据 Grocery CRUD 中的第三个参数设置下拉输入默认值

    下面的代码示例 function product parameter crud new grocery CRUD crud gt callback add field dropdown field name array this add f
  • 另一种复制算法

    我有两个向量 vector objects vector
  • 使用 C# ASP.NET 时“WebClient 请求期间发生异常”

    因此 我为我的程序构建了一个自动更新程序 这里运行的代码是 new WebClient DownloadFile XXXX checkingfolder SelectedPath XXX 是我的网络服务器 它在 verio 中作为 VPS
  • 在哪里可以找到 Perl 正则表达式练习集? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • width() 和 height() 适用于没有 jQuery 的现代浏览器

    我正在尝试为弹性 div 实现一个简单的折叠 展开效果 即当元素的实际尺寸未通过 CSS 设置时 因此无法简单确定 所以我需要 jQuery 的 width 和 height 的等效项来表示任意元素 这些方法应该返回可分配给 style w
  • 我的 winform 应用程序使用 xml 文件来存储数据,我应该将它们存储在哪里以便 Vista 用户可以写入数据?

    我的 winform 应用程序使用 xml 文件来存储数据 我应该将它们存储在哪里以便 Vista 用户可以写入数据 Thanks Use the Environment GetFolderPath http msdn microsoft
  • 对于新的小型应用程序来说,实体框架值得迁移吗?

    对于新的小型应用程序来说 实体框架值得迁移吗 大约 10 个表格和一个 WinForms 应用程序 即替代方案是 DataTables DataRows 或 Linq to SQL 我不同意那些说 LINQ to SQL 更适合小型项目的说
  • 将 Spark Structure Streaming DataFrame 转换为 Pandas DataFrame

    我设置了一个 Spark Streaming 应用程序 它从 Kafka 主题进行消费 我需要使用一些接受 Pandas Dataframe 的 API 但是当我尝试转换它时 我得到了这个 org apache spark sql Anal
  • C 循环 For Vs While Vs goto 的性能 [重复]

    这个问题在这里已经有答案了 可能的重复 C C GOTO 比 WHILE 和 FOR 更快吗 https stackoverflow com questions 5366929 c c is goto faster than while a
  • GKTurnBasedMatch接收数据

    我正在尝试实现一个基于回合的应用程序 发送回合数据没有问题 但我看不到自动接收数据的方法 到目前为止 我已经了解了这么多 有一个GKTurnBasedEventHandlerDelegate 协议 它很容易实现 但是我在哪里将该对象设置为它
  • 在php中将两个数组值相乘[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我试图用以下公式将两个数组值相乘 Q
  • 我如何查看bitbucket存储库中用户发布的所有评论

    In the repository首页 我可以看到发表的评论recent activity在底部 位它只显示 10 条评论 我想要所有从一开始就发表的评论 有什么办法吗 可以使用以下方式检索拉取请求 问题和提交的评论bitbucket 的
  • 如何在 Objective C 中向超级视图发送消息

    我是 Objective C 和 Cocoa 的新手 我只是不明白如何向 UIView 的超级视图发送消息 我无法让它发挥作用 这是我到目前为止所尝试的 在我的 MainView 中 我有一个名为 ResetDrawType 的方法 voi