在另一个自定义ViewController中更改自定义UIView的变量

时间:2018-11-19 07:31:20

标签: ios swift uiview swift4

我知道这可能是基本问题,但是我是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。另外,我可以看到带有占位符文本的文本字段。唯一的问题是我无法为其设置文本。 谁能帮忙。我的代码有什么问题。

4 个答案:

答案 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)看到您加载的视图。设置将解决此问题的视图的框架大小。