问题标签 [initwithframe]
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.
objective-c - Objective C - 自定义视图和实现 init 方法?
我有一个自定义视图,我希望能够in-code
在nib
.
编写initWithFrame
和initWithCoder
方法的正确方法是什么?它们都共享一个用于某些初始化的代码块。
ios - loadNibNamed 与 initWithFrame 两难设置框架的高度和宽度
我创建了一个与 .xib 文件关联的 UIView 子类。此 UIView 子类将在 UIViewController 中使用。在控制器中,我认为我们如何实例化 UIView 子类有两种选择:
和
我更喜欢允许我执行自定义初始化的第一种方法或其变体。唯一的问题是我必须指定一个框架的矩形,它已经在 . xib
(我的意思是框架的高度和宽度MyUIView
)。是的,我可以在 中再次对其进行硬编码aRect
,但这维护起来很繁琐(例如,当我在 .xib 中更改 UI 的位置时,我也必须更新aRect
)。
因此,应该考虑第二种方法,因为框架矩形是自动设置的。剩下的问题是我无法自定义初始化程序(例如,我想在初始化期间传递额外的参数)。
你的偏好是什么?你认为哪一个更好?
EDIT1:受塞尔吉奥回答的启发,我想出了这个解决方法:
objective-c - 如何在不被 initWithFrame: 覆盖的实例变量的情况下保存 NSView?
这里是可可新手。我试图在 NSView 中对实例变量进行编码以保存到文件中。但是,每当我对其进行编码时,它都会在调用 initWithFrame: 时被覆盖为 (null)。有没有办法可以跳过这种行为并将实例变量加载到未归档的 NSView 上?这是我的代码:
在上面的代码中,我首先将要填充的颜色设置为绿色,然后在 drawRect: 方法完成后将其更改为黄色,因此保存的颜色为黄色。但尽管如此,它在 initWithFrame: 日志注释中恢复为空,并且我再次获得绿屏。从外观上看,唯一的方法似乎是将数据与视图分离。但如果有更简单的方法,任何人都可以帮助我吗?
ios - 用 initWithFrame 编写的类——我想从 Storyboard 实例化
我想使用 UIExpandableTableView - https://github.com/OliverLetterer/UIExpandableTableView#readme。
我遇到了一个问题,因为它唯一的初始化程序是initWithFrame
:
我一直在尝试从 Storyboard 初始化 tableView 并意识到我看到的错误是因为它initWithFrame
从未被调用并且NSMutableDictionaries
没有被初始化。如何解决这个问题?
如果不容易解决,我可以以编程方式实例化并使用initWithFrame
,但除了想使用 Storyboard 之外,我也很好奇解决方案会是什么。
编辑以下是这些属性及其 ivars 在 UIExpandableTableView 中的声明方式。这是在 .h 文件中:
@private id __UIExpandableTableView_weak _myDelegate; id __UIExpandableTableView_weak _myDataSource;
}
这是 UIExpandableTableView 的 .m 文件的顶部。吨
ios - initWithFrame 被赋予空框架
我正在尝试使用利用 UINavigationBar 的自定义子类的 UINavigationController。但是,我遇到了 initWithFrame 的问题。当调用 initWithFrame 时,我打印出尺寸,它显示 0.0 宽度和 0.0 高度。但是,当我在 UINavigationBar 子类的 -(void) layoutSubviews 中打印出相同的框架时,该框架已正确设置。为什么 initWithFrame 接收到零大小的帧,我能做些什么来解决这个问题?手动调用 initWithFrame 或类似的东西听起来不正确,因为 UINavigationController 应该处理这个问题。以下是相关代码:
AppDelegate.m
自定义导航栏.m
谢谢!
ios - 子层仅在 initWithFrame 中创建时绘制,而不是 initWithCoder
我有一个带有子层(CAShapeLayer)和子视图(UILabel)的自定义视图。当我在其中创建图层initWithCoder
并设置背景颜色时,它总是显示为黑色。但是,如果我将代码移入initWithFrame
,则颜色会成功显示。
我们不应该在 中创建子层initWithCoder
吗?
这是我可以让我的代码工作的唯一方法:
更新:
原来我drawRect
的填充颜色设置错误。我应该使用colorLayer.fillColor = myColor.CGColor
而不是[myColor setFill]
那时[path fill]
ios - initWithImage 工作正常 initWithFrame 被多次调用
我将一个UIImageView
或UIView
用于生成带有数字的简单颜色图块。如果我使用UIImageView
,我使用initWithImage
方法。如果我使用UIView
,initWithFrame
则正在使用该方法。红色方形图像或以编程方式生成的红色视图用于初始化。
可以在两个屏幕截图中看到问题:何时initWithImage
使用 - 一切正常。如果initWithFrame
正在使用方法,我将以多个白色视图结束,而没有以正常视图的均匀顺序创建任何信息。附上所有截图和代码。
这是使用初始化时的外观initWithImage
:
这就是它的外观initWithFrame
:
还有 for 循环,从另一个类(UIScrollView 子类)调用这些初始化程序。标签值是在视图初始化后设置的。
谷歌搜索给我的印象是这是一个非常普遍的问题,但我还没有找到任何解决方案来解决这个问题。此外,我仍然不明白,为什么数字完全正确,唯一的问题是视图位置。
ios - initWithFrame 和 loadNibNamed 不能一起工作?
我正在使用带有嵌入式 UIPageControl 的 Paged UIScrollView,如https://github.com/romaonthego/REPagedScrollView中所述。
我使用时代码工作正常
但我需要为我的项目使用一个 nib 文件。我这样称呼它:
几乎可以正常工作,我可以调用视图,唯一的问题是视图不听 initWithFrame:CGRectMake,它加载全屏,我再也看不到页面控件进行导航。
自动布局设置为关闭。
谁能指出我在这里错了?我能做些什么来解决这个问题?
最好的问候,大卫
macos - Cocoa:来自自定义视图代理的 initWithFrame 未被调用
根据苹果的文档Creating a Custom View如果您在 Interface Builder 中使用自定义视图代理,则应调用此方法。
如果您尚未为自定义视图创建 Interface Builder 调色板,则可以使用两种技术在 Interface Builder 中创建子类的实例。第一个是使用 Interface Builder 容器面板中的 Custom View 代理项。此视图是您的自定义视图的替身,允许您相对于其他视图定位和调整视图大小。然后,您可以使用检查器指定视图表示的 NSView 的子类。当应用程序加载 nib 文件时,自定义视图代理创建指定视图子类的新实例并使用 initWithFrame: 方法对其进行初始化,并根据需要传递任何自动调整大小标志。然后视图实例会收到一条 awakeFromNib 消息。
不幸的是,在我的情况下它没有被调用。有没有人不得不处理这个问题?
ios - `[UIView initWithFrame:]` 的文档冲突:可为空还是非空?
使用CLANG_ANALYZER_NONNULL
(ie -Xclang nullability
),我得到“从预期返回非空值的函数返回 Null ”:
使用 Xcode 7.3 和 iOS 9.3 文档,我检查initWithFrame:
并返回nil
:
但是 UIView.h 用 封装了所有东西NS_ASSUME_NONNULL_BEGIN
,所以我们可以解释如下:
作为:
所以文档解释它是nullable
,而头文件说它是nonnull
. 相信哪一个?
我应该写:
或者:
更新
Xcode 文档已更新,现在是:
所以没有更多的冲突。