问题标签 [awakefromnib]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
macos - 以编程方式和从 NIB 初始化自定义控件
我正在编写一个自定义 UI 控件,并且对围绕初始化的标准做法(特别是对控件委托的依赖)感到好奇。像大多数控件一样,我的控件依赖委托来提供有关如何呈现自身的重要信息。
当从 NIB 中使用控件时,会正确调用initWithCoder:
和awakeFromNib
方法,并且可以通过IBOutlet
. awakeFromNib
调用一个辅助方法setupControl
,该方法与委托交互以设置我的控件。生活是美好的!
但是,当我使用 , 手动创建控件时initWithFrame:
,显然awakeFromNib
不会被调用。我很好奇其他开发人员如何处理支持 IB 和编程控件创建的问题。我可以看到一些支持程序化案例的技术:
- 强制开发人员调用
initWithFrame:
,然后是setDelegate:
,然后是setupControl
。不太繁重,但确实暴露了我控制的内部运作(即他们必须知道setupControl
) - 修改
initWithFrame:
方法以获取委托。这确实更多地封装了内部工作,但是,我不确定这是一个特别常用的习惯用法(并且似乎基于委托响应操作子视图通常会推迟到视图生命周期的稍后时间,而不是在初始化程序中) - 覆盖
setDelegate:
访问器以调用该setupControl
方法。不是这个的忠实粉丝,因为它带有副作用编程的味道。
只是想我会把它扔在那里看看我忽略了哪些技术。想法?
谢谢。克雷格
ios - 在 iOS 的自定义视图中设置项目的属性
我正在创建一个 customView,例如,想设置标签的文本颜色并初始化标签的文本。
initWithFrame 是通用函数。
我已经尝试在 initWithFrame 中初始化标签,但它不起作用。但是当我在 awakeFromNib 中执行此操作时,它允许我设置文本颜色而不是文本(此值来自字典)
初始化标签和其他东西的颜色和文本的正确方法是什么?
需要一些建议和指导...
编辑:
像这样的东西?
objective-c - 关闭和打开窗口时暂停和恢复可重复的 NSTimer
现在我知道有关于 NSTimer 暂停的问题,但没有关于可重复和关闭/打开窗口的问题。切换暂停效果很好(使用按钮检查)。重新打开窗口会出现 BAD_ACCESS 错误。
ios - UITableViewCell 对象不调用 awakeFromNib
我有一个继承自 的类UITableViewCell
,它有一堆IBOutlets
. 我以前一直在以重用单元格并根据需要对其进行初始化的方式使用此对象。这种方法太慢了,所以我决定创建一个UITableViewCell
对象数组,然后根据需要在cellForRowAtIndexPath:
方法中添加它们。
IBOutlet
除对象外,所有内容都可以正常加载。awakeFromNib
从未被调用,所以我认为这与我的问题有关。
只是为了澄清当我初始化函数中的单元格时它被调用得很好cellForRowAtIndexPath
,只是当我试图在视图控制器viewWillAppear
方法中预加载它们时它会中断。
ios - 在调用 awakeFromNib 之前是否可以在容器视图中设置属性?
我有一个包含视图控制器的容器视图。在调用 awakeFromNib 之前,我需要在此视图控制器中设置一个非 UI 属性。但是,在 awakeFromNib 发生之前,不会调用嵌入 segue 的 prepareForSegue 方法。
有没有办法在 awakeFromNib 之前将此信息传递给包含的视图控制器?
objective-c - Objective-C:以有效的方式进行本地化
我一直在通过为每种语言创建字符串文件和/或本地化 xib 文件来本地化我的程序。这个过程非常缓慢,因为维护所有本地化的 xib 文件并向界面添加新功能很复杂。
为了避免这种情况,在我最近的项目中,我只是为界面上的每个 UI 元素制作了 IBOutlets,并-(void)awakeFromNib
更改了所有使用的元素的标题和字符串值NSLocalizedString
和一个字符串文件。
有没有其他更有效的方法来批量翻译所有 UI 而无需创建多个 xib 和/或浪费时间尝试“保持同步”?
我有一个想法来解决这个问题,我制作了一个 NSObject 类别,如下所示:
正如您在我的类别中看到的那样,我可以NSTextField
通过将翻译占位符保留为NSTextField
文本来轻松更改应用程序中所有对象的值...
这很好用,但是我担心性能,因为这将对我的应用程序中的所有对象运行。
这样做很糟糕吗?有没有更好的选择?
PS:我创建了一个类别NSObject
而不是NSTextField
,NSWindow
因为这样我可以将所有本地化逻辑保存在一个地方,并且只需else if
为我可能想要翻译的每个 UI 类添加另一个语句,而不是创建一个新类别。
ios - 使用 nib 在自定义视图上设置 IBOutlet 属性
我有一个具有 nib 文件的通用自定义视图。我将这个自定义视图子类化并像这样初始化它:
我想在通用视图的 IBOutlets 上设置一些属性,但是如果我在 initWithFrame 方法中设置它们,则通用视图中的 IBOutlets 尚未加载并且仍然为零。自定义视图中的 awakeFromNib 方法永远不会被调用。如何在自定义视图类中设置通用 nib 文件 IBOutlets 的属性?
我只针对 iOS 7.0 及更高版本,使用 Xcode 5。
macos - 为什么 NSStatusItem 显示多次?
一个 NSStatusItem 附加了一个 NSMenu,并且 NSMenu 的按钮之一打开了一个 NSWindow。每当单击其中一个按钮时,窗口都会按预期打开并正常工作,但会打开另一个 NSStatusItem 显示。
NSStatusItem 是一个时钟,所以我可以看到它正在正确更新。但是,克隆的 NSStatusItem 没有自己的菜单。如果我按下使窗口更多次的按钮,则会弹出更多 NSStatusItem 的克隆版本。
除了这个,一切都很好。
这不是很多信息,但我想不出其他任何东西可以帮助你。我很乐意提供更多信息或尝试一些东西。
编辑:每次单击按钮时,都会以某种方式调用 awakeFromNib,这就是为什么会发生另一个半工作 NSStatusItem 的原因。
编辑:临时解决方法是将 awakeFromNib 方法放在dispatch_once
.
编辑:添加了单击按钮时触发的方法,如@zpasternack 所建议的那样
objective-c - 如何在没有 IBAction 的情况下更新标签(NSTextfield)?
我正在尝试实现一个简单的机制:拖动文件后,将其名称传递给标签。但我无法理解如何做到这一点。这是我的代码:H文件:
M 文件:
ps 老实说,我在这里和谷歌中搜索了答案,但没有找到。
cocoa - awakeFromNib 连续调用
我在 NSView 中有一个基于视图的 NSOutlineView。当视图出现在我的应用程序中时,大纲视图会不断闪烁。awakeFromNib 被重复调用,其中包含 [myOutlineView reloadData]。但是,一旦我调整窗口大小(因此是视图),闪烁就会消退,并且不再调用 awakeFromNib。
我认为闪烁是由于在 awakeFromNib 中重复调用 reloadData 引起的。我无法确定的是为什么 awakeFromNib 会被连续调用。我知道每次 NSOutline (here)创建 NSTableCellView 时都会调用它,但这并不能解释为什么会连续调用它。
由于一旦我调整了窗口大小,这种行为就会停止,我对嵌入 NSOutlineview 的 NSScrollView 持怀疑态度,但我现在不知道如何确认这一点或更重要的是如何修复它。
那么任何人都可以就可能导致这种行为的原因给我一些指导吗?
编辑
这是在 awakeFromNib 处中断的堆栈跟踪,基于此看起来确实像创建调用 awakeFromNib 的 NSTableCellView,但为什么要连续完成?