在 textFieldDidBeginEditing 上显示带有 xib 的 UIView

Posted

技术标签:

【中文标题】在 textFieldDidBeginEditing 上显示带有 xib 的 UIView【英文标题】:Show UIView with xib on textFieldDidBeginEditing 【发布时间】:2014-12-20 16:30:35 【问题描述】:

我使用 xib 制作了一个自定义 uiview 类,我希望能够使用 textFieldDidBeginEditing 在屏幕上显示它,但我似乎无法弄清楚。

在我的自定义视图中:

required init(coder aDecoder: NSCoder) 
    super.init(coder: aDecoder)

    //Load the interface

    NSBundle.mainBundle().loadNibNamed("customNib", owner: self, options: nil)
    self.addSubview(self.view)



override init(frame: CGRect) 
    super.init(frame: frame)

我在 IB 中所做的工作是在我的界面中放置一个视图并将其链接到我的 customView 类。

现在,我想以编程方式使用自定义类显示此视图。

如果我在我的 textFieldDidBeginEditing 中执行此操作(我的主视图中有一个文本字段):

var myView: myCustomView = myCustomView(frame:CGRectMake(100, 100, 100, 100))
    myView.backgroundColor = UIColor.redColor()

self.view.addSubview(myView)

我在屏幕上看到一个红色方块,但它没有“加载”xib。

我问的不是好问题还是我做错了什么?你们能指出我正确的方向吗?

我在这里解决了所有类似的问题,但找不到解决方案。

【问题讨论】:

如果您使用 xib 创建自定义视图,则必须使用此 NSBundle.mainBundle().loadNibNamed("customNib", owner: self, options: nil) 加载它,然后分配其框架,然后将其添加到子视图。这样做的结果是什么? 你可以把这个答案作为你问题的答案而不是接受它......你永远不知道什么时候有人会犯同样的错误。 【参考方案1】:

只是最愚蠢的事情,我用 init(frame) 初始化了 myView 并且没有将我的 xib 放在屏幕上。这有效:

override init(frame: CGRect) 
    super.init(frame: frame)

    NSBundle.mainBundle().loadNibNamed("customNib", owner: self, options: nil)
    self.addSubview(self.view)

【讨论】:

以上是关于在 textFieldDidBeginEditing 上显示带有 xib 的 UIView的主要内容,如果未能解决你的问题,请参考以下文章

秋的潇洒在啥?在啥在啥?

上传的数据在云端的怎么查看,保存在啥位置?

在 React 应用程序中在哪里转换数据 - 在 Express 中还是在前端使用 React?

存储在 plist 中的数据在模拟器中有效,但在设备中无效

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据