问题标签 [loadnibnamed]

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.

0 投票
1 回答
409 浏览

ios - ios:为什么临时加载XIB,以获得帧高度,破坏内存?

我正在尝试获取在他们自己的 XIB 中定义的几个 UITableCellView 的高度。我创建了一个在 UITableViewDelegate 的回调 heightForRowInPathIndex 中使用的高度列表。当我这样做时,应用程序就像内存损坏一样崩溃。

我查看了retainCount,它符合预期。

0 投票
3 回答
2159 浏览

ios - 如何使用与 nib 文件中指定的单元格标识符不同的单元格标识符加载 tableview 单元格

// 实际问题
在使用与 nib 中指定的单元格标识符不同的单元格标识符加载 nib 文件(tableviewcell)时,我需要帮助。

// 我正在做的事情的背景
我有一个自定义 UITableViewCell,其中包含少量标签、少量图像和少量按钮。所有这些都放在一个 nib 文件中。表格视图单元格的内容需要根据某些条件动态更改,即如果横向则不显示按钮;如果标签中没有要显示的内容,则不显示标签等。左侧的相邻标签/视图应扩展以填充缺少的标签/按钮的空间。

我能够让它工作。我这样做的方法是在cellForRowAtIndexPathI
- 删除不需要显示的视图,removeFromSuperView并通过
- 调整frame并调用setNeedsDisplay需要调整的视图。

我使用 nib 文件中提到的相同单元格标识符来使单元格出列。如果返回的单元格为 nil,那么我使用loadNibNamed:withOwner:options加载笔尖。但是,我担心这会在来回滚动时导致问题,因为当条件不满足时,被重用的单元格可能没有显示内容所需的视图,因为它们可能已经被删除。

为了解决这个问题,我计划对不同的条件使用不同的单元格标识符,这些条件会触发单元格的不同外观。或者,我也在考虑只隐藏视图并将相邻视图扩展到隐藏视图。这样我就不需要处理不同的单元格标识符。

Edit2:
我隐藏和调整相邻视图框架的替代方法满足了我的需要。

但是我仍然想找到我上面描述的实际问题的答案。

// 潜在的解决方案
我想知道是否可以通过函数的options参数将单元格标识符传递给 nib 加载代码loadNibNamed。这可能吗?如果你们能提供一个示例代码来实现这一点,那就太棒了。

谢谢你的时间。

0 投票
2 回答
396 浏览

iphone - 从 nib 加载的视图不接收触摸事件

我正在尝试从笔尖加载一个视图并将其添加到主视图中。这是我的代码。

我将笔尖加载initWithFrame@interface AddTaskView:UIView

之后我初始化视图并将其添加到主视图:

一切正常,但 AddTaskView 没有收到触摸事件。我有三个按钮,当我尝试按下它们时,它们不会收到动作。我制作了“AddTaskView”类型的笔尖,但没有任何运气。我还查看了子视图,“AddTaskView”是顶视图。

我在 AddTaskView 中添加了这段代码,看看我是否得到了触摸并且没有响应:

我如何有机会响应触摸事件?

0 投票
1 回答
5986 浏览

ios - loadNibNamed 与 initWithFrame 两难设置框架的高度和宽度

我创建了一个与 .xib 文件关联的 UIView 子类。此 UIView 子类将在 UIViewController 中使用。在控制器中,我认为我们如何实例化 UIView 子类有两种选择:

我更喜欢允许我执行自定义初始化的第一种方法或其变体。唯一的问题是我必须指定一个框架的矩形,它已经在 . xib(我的意思是框架的高度和宽度MyUIView)。是的,我可以在 中再次对其进行硬编码aRect,但这维护起来很繁琐(例如,当我在 .xib 中更改 UI 的位置时,我也必须更新aRect)。

因此,应该考虑第二种方法,因为框架矩形是自动设置的。剩下的问题是我无法自定义初始化程序(例如,我想在初始化期间传递额外的参数)。

你的偏好是什么?你认为哪一个更好?

EDIT1:受塞尔吉奥回答的启发,我想出了这个解决方法:

0 投票
1 回答
1243 浏览

objective-c - 如何从应用程序加载 xib 并显示自定义框架的窗口

我创建了一个框架并添加了一个名为“MyXibFile”的 xib 文件。我创建了一个单独的应用程序并将这个框架添加到其中。我想加载这个.xib文件来显示它的窗口。

我正在使用以下不起作用的代码片段

我可以在控制台中看到消息“笔尖加载失败”有什么建议可以解决这个问题吗?

0 投票
1 回答
572 浏览

ios - loadNibNamed:owner:options 创建的自定义 UIView:removeFromSuperview 后泄漏

我有一个应用程序,我想在其中显示一些内容的 CustomView(继承自 UIView)。但是我在运行时的每一点都不需要它,所以我想创建它并删除它以避免浪费内存。

我在单独的 nib 文件中有这个视图。并在 viewController 中使用此代码加载它:

myCustomView 是 viewController 的属性

但是在 Instruments 中我可以看到#Living 是 3(例如,当我调用上面的代码 3 次时),#Transitory 仍然是 1,而 #Overall 是 4。这意味着 MyCustomView 泄漏:( 当我设置self.myCustomView = nil它时它是无用的:(

有人可以帮我解决这个泄漏吗?我正在使用ARC。

0 投票
1 回答
205 浏览

objective-c - Xcode 4:在不同文件的方法中加载 Nib

抱歉,如果这个问题很简单,但过去 2 天我一直被困在这个错误上,而且我无法克服它。我正在使用 Xcode 4.3.2

我正在尝试在名为 BController.m 的文件中名为“- (void) process”的方法中加载一个名为 AController.xib 的 nib

为了清楚起见,我将 ./A/AController.xib(这是一个 UIView)、./A/AController.m、./A/AController.h 复制到目录 ./B

我只提到这一点是因为我不确定这对我的问题是否重要。

目前,我的流程作为流程工作(这可能是我的问题):

  • 带有“购买”按钮的视图加载
  • 用户单击“购买”按钮,该按钮有一个名为“buyNow”的 IBOutlet
  • “buyNow”调用“buy”,然后调用“process”
  • 然后进程尝试使用以下内容(选项 1)加载 nib:

    控制器 *blah; for (id object in bundle){ if ([object isKindOfClass:[AController class]]) blah = (AController *) object; } assert(blah != nil && "blah can't be nil"); [self.view addSubView: blah];

我在这里得到的错误是 main.m 中的“线程 1:信号 SIGABRT”我也尝试过(选项 2),

和(选项 3)

对于所有 3 个选择,我都得到相同的错误。在方法“过程”中尝试了每个选项。“过程”是用 Bm 写的,谁能提供一些帮助,以便我弄清楚这一点?关于这些选项为何失败的任何指导都将非常有助于我的理解,并将不胜感激。感谢您帮助菜鸟!

0 投票
1 回答
5678 浏览

ios - 使用 NIB 加载视图的 UIView.addSubview 只会添加根 UIView

我在 XIB 文件中外部化了一个组件,因此我可以在几个不同的视图中重用它。现在在我的视图控制器中,我加载了基于 XIB 的 UIView 并将其添加到当前视图中:

起初,我认为它不起作用……但实际上它起作用了,只是将根视图(即我的所有图形组件的容器,它是透明的)放到我的视图中。

所以我需要把这种代码(对于每个子组件)让它工作:

这是非常违反直觉的,而且我认为它不会创建我想要的视图层次结构。

我确信有一个解决方案,因为我在 UITableViewController 中做了同样的事情来从 XIB 加载自定义表头。在这种情况下使用完全相同的 XIB 文件可以正确加载所有内容。这是代码:

使用上面的代码,一切都很好,我得到了整个视图(= 包含所有内容的根视图容器)作为我的表格部分的标题。

所以问题是:在我的第一个例子中我做错了什么?如何将所有内容(容器 + 所有内容)添加到我的父 UIView 作为适当的 UIView 层次结构?

编辑:我需要准确地将所有内容都组织在我的 XIB 文件中的单个根 UIView 中,如下所示(我无法发布图像):

非常感谢您的帮助 !

克里斯托夫

0 投票
0 回答
234 浏览

ios - 动态加载视图

尝试动态加载视图时遇到一个奇怪的问题。

我得到的错误如下:

* 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法在包中加载 NIB:“NSBundle(已加载)”,名称为“ItemView”*第一次抛出调用堆栈:

奇怪的是,它似乎是随机发生的——有时它有效,有时它对我不利。

我按如下方式创建项目:

构造函数如下:

有谁知道这会导致什么?

0 投票
3 回答
30619 浏览

ios - iOS loadNibNamed 混乱,什么是最佳实践?

我熟悉为我自己的 UIView 子类创建 XIB 的大部分过程,但并非一切对我来说都正常工作 - 这主要与 IBOutlets 链接有关。我可以让他们以一种迂回的方式工作。

我的设置是这样的:

  • 我有 MyClass.h 和 MyClass.m。他们有用于 UIView(称为视图)和 UILabel(称为 myLabel)的 IBOutlets。我添加了“视图”属性,因为网上的一些示例似乎表明您需要这个,它实际上解决了我因为找不到视图属性而崩溃的问题,我想即使在 UIView 父类中也没有.
  • 我有一个名为 MyClass.xib 的 XIB 文件,它的 File's Owner 自定义类是 MyClass,在该类的 .h 和 .m 存在之后正确预填充。

我的 init 方法是我遇到问题的地方。

我尝试使用 NSBundle mainBundle 的“loadNibNamed”方法并将所有者设置为“self”,希望我会创建一个视图实例,并且它会自动使其插座与我班级中的插座相匹配(我知道如何做到这一点,我很小心)。然后我想我想让'self'等于那个笔尖中索引0处的子视图,而不是做

或类似的东西。

我觉得我在这里做错了,但是在线示例在 init 方法中发生了类似的事情,但是他们将该子视图 0 分配给 view 属性并将其添加为子视图-但这不是总共两个 MyClass 实例?一个基本上与 IBOutlets 无关,包含通过 loadNibNamed 实例化的子 MyClass?或者充其量,它不是一个带有额外中间 UIView 的 MyClass 实例,其中包含我最初想要作为 MyClass 的直接子级的所有 IBOutlets?当涉及到像 instanceOfMyClass.frame.size.width 这样的事情时,这会带来一点烦恼,因为它返回 0,而当引入的子 UIView 返回我正在寻找的真实帧大小时。

我做错的事情是我在 init 方法中弄乱了 loadNibNamed 吗?我应该做更多这样的事情吗?

还是像这样?

提前感谢您的帮助。