xib如何結合UIView?

MoneyCitys 2016-09-26 05:48:16
是這樣的
我想要使用xib自訂view
所以做了一個 CreateTask.xib
裡面有一個 taskNameField: TextField

接著創一個類別 TaskUIView
並且把createTask的class指向TaskUIView

以下是我的程式碼

import UIKit

class CreateTaskView: UIView {


@IBOutlet weak var taskNameField: UITextField!
var nibView: UIView!

var taskName: String? {
get {
if taskNameField == nil {
return "taskNameField is nil"
}
if let s = taskNameField.text {
return s
} else {
return ""
}
}
}

override init(frame: CGRect) {
super.init(frame: frame)
setup()
}

required init?(coder aDecoder: NSCoder) {
print(“無限迴圈”)
super.init(coder: aDecoder)
setup()
}



func setup() {
nibView = loadViewFromNib()
nibView.frame = bounds
nibView.autoresizingMask = [UIViewAutoresizing.flexibleWidth ,UIViewAutoresizing.flexibleHeight]
addSubview(nibView)
}

func loadViewFromNib() -> UIView {
let nib = UINib(nibName: "CreateTask", bundle: nil)
let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView

return view
}
}


接著我調用此view


let rect = CGRect(x: 0, y: 0, width: 300, height: 300)
let nibView = CreateTaskView(rect)
self.view.addSubview(nibView)


發覺一直卡在 28行的 required init?(coder aDecoder: NSCoder) 此段程式碼
似乎是因為載入xib會調用此初始化方法, 所以就卡住了

最後我把30行的setup()拿掉
總算是顯示正常, 但我要從taskNameField取值的時候
發覺他並沒有初始化, xib加上outlet了, 但都為nil

請問這是什麼原因呢? 還是我載入xib用的方式錯了
...全文
1436 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
vphoenix 2016-12-11
  • 打赏
  • 举报
回复
看你下面的代码,调用的是22行那个构造函数。你27行那个构造函数,在比如说storyboard通过xib自动创建uiview的时候会被调用。所以不知道你为什么会卡住。

1,424

社区成员

发帖
与我相关
我的任务
社区描述
Swift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C共同运行于MAC OS和iOS平台,用于搭建基于苹果平台的应用程序。
swift 技术论坛(原bbs)
社区管理员
  • Swift
  • 网罗开发
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧