Изменение переменных пользовательского UIView в другом пользовательском ViewController - PullRequest
0 голосов
/ 19 ноября 2018

Я знаю, что это может быть основной вопрос, но я новичок в 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"**
    }

Я использую раскадровку.Кроме того, я вижу текстовое поле с заполнителем text.only проблема в том, что я не могу установить текст для него.Кто-нибудь может помочь.Что не так в моем коде.

Ответы [ 4 ]

0 голосов
/ 19 ноября 2018

добавить фрейм для searchTextFieldView внутри метода setupUI (). потому что представление загружено в представление, но у него нет рамки (x, y position, width и height). Измените цвет вашего UIViewController на серый, и вы увидите загруженный вид в левом углу (0,0). установить размер кадра для представления, которое решит эту проблему.

0 голосов
/ 19 ноября 2018

Вы создаете свой просмотр через SearchTextFieldView(), в то время как у вас есть 2 доступных инициализатора init(frame:) и init?(coder:).

Если вы измените

let searchTextFieldView = SearchTextFieldView()

на

let searchTextFieldView = SearchTextFieldView(frame: CGRect(x: 50, y: 50, width: 100, height: 100))

вы увидите текст.

0 голосов
/ 19 ноября 2018

Вы не устанавливаете рамку для вида. Также вы не загружаете .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"
    }

Не забудьте создать xib с именем "SearchTextFieldView.xib", когда вы загружаете этот кончик в функцию инициализации.

Надеюсь, это поможет:)

0 голосов
/ 19 ноября 2018

Необходимо вызвать searchTextFieldView.setNeedsDisplay (), это, в свою очередь, вызовет override func draw(_ rect: CGRect) in class SearchTextFieldView.

Добавьте override func draw(_ rect: CGRect) {} в SearchTextFieldView и попробуйте установить searchText.text = <someValue> в draw(). Вы можете использовать свойство String в SearchTextFieldView, чтобы получить <someValue> от клиента (того, кто использует SearchTextFieldView) класса.

...