我知道这可能是基本问题,但是我是Swift的新手。 另外,我已经尝试过各种SO解决方案,但无法解决问题。 因此,如果有人可以帮助我解决我的问题。
我有一个自定义的UIVIEW类,如下所示:
class SearchTextFieldView: UIView, UITextFieldDelegate{
public var searchText = UITextField()
override init(frame: CGRect) {
super.init(frame: frame)
initializeUI()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initializeUI()
}
func initializeUI() {
searchText.placeholder = "Enter model no"
searchText.backgroundColor = UIColor.white
searchText.textColor = UIColor.darkGray
searchText.layer.cornerRadius = 5.0
searchText.delegate=self
self.addSubview(searchText)
}
override func layoutSubviews() {
searchText.frame = CGRect(x: 20.0, y: 5.0, width: self.frame.size.width - 40,height : self.frame.size.height - 10)
}
}
现在我想从另一个类将文本设置为SearchText文本字段,如下所示:
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
// Do any additional setup after loading the view.
}
func setupUI() {
let searchTextFieldView = SearchTextFieldView()
self.view.addSubview(searchTextFieldView) //adding view containing search box view at the top
**searchTextFieldView.searchText.text = "My Text"**
}
我正在使用Storyboard。另外,我可以看到带有占位符文本的文本字段。唯一的问题是我无法为其设置文本。 谁能帮忙。我的代码有什么问题。
答案 0 :(得分:2)
需要调用searchTextFieldView.setNeedsDisplay(),这将依次在override func draw(_ rect: CGRect)
中调用class SearchTextFieldView
。
在SearchTextFieldView中添加override func draw(_ rect: CGRect) {}
,然后尝试在searchText.text = <someValue>
中设置draw()
。您可以在String
中使用SearchTextFieldView
属性,以从客户端(正在使用<someValue>
的客户端)类中获取SearchTextFieldView
。
答案 1 :(得分:1)
您正在通过import matplotlib.pyplot as plt
创建视图,同时有2个可用的初始化器SearchTextFieldView()
和init(frame:)
。
如果您更改
init?(coder:)
使用
let searchTextFieldView = SearchTextFieldView()
您将看到文本。
答案 2 :(得分:1)
您没有为视图设置框架。同样,您没有在视图类中加载.xib。它应该像:-
class SearchTextFieldView: UIView, UITextFieldDelegate{
//MARK:- Initializer
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialize(withFrame: self.bounds)
}
override init(frame : CGRect) {
super.init(frame: frame)
initialize(withFrame: frame)
}
//MARK: - View Initializers
func initialize(withFrame frame : CGRect) {
Bundle.main.loadNibNamed("SearchTextFieldView", owner: self, options: nil)
view.frame = frame
view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.addSubview(view)
initializeUI()
}
}
现在您可以在视图控制器中调用以下代码:-
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
// Do any additional setup after loading the view.
}
func setupUI() {
let searchTextFieldView = SearchTextFieldView(frame: ?*self.view.bounds)
self.view.addSubview(searchTextFieldView)
//adding view containing search box view at the top
searchTextFieldView.searchText.text = "My Text"
}
当您在初始化函数中加载该笔尖时,别忘了创建一个名称为“ SearchTextFieldView.xib”的xib。
希望它会有所帮助:)
答案 3 :(得分:1)
在setupUI()方法内为searchTextFieldView添加框架。因为视图已加载到视图上,但没有框架(x,y位置,宽度和高度)。将您的UIViewController的颜色更改为灰色,您可以在左角(0,0)看到您加载的视图。设置将解决此问题的视图的框架大小。