Есть ли способ выдать себя за представление? - PullRequest
0 голосов
/ 14 мая 2018

У меня просто быстрый вопрос:

Есть ли способ выдать себя за представление?Я разработал вид в раскадровке.Но теперь я хочу использовать много видов, которые точно такие же, как в Storyboard.Я просто хочу скопировать вид 7 раз.Я пытался

let testarray:[UIView] = [someview, someview, someview]

Но тогда, конечно, если я изменю значения одного представления, это изменит значение всех представлений, и это не то, что я не буду.Надеюсь, вы понимаете, что я хочу сделать, потому что мои знания английского не так уж хороши.

1 Ответ

0 голосов
/ 14 мая 2018

Да, это возможно, используя Xibs.Я лично делаю это следующим образом:

  1. Я создаю файл .xib с одним представлением внутри, скажем, MyView.xib
  2. Создайте файл .swift с вашим классомвнутри MyView.swift.Внутри этого поместите все @IBOutlet и все.
  3. Внутри MyView.xib, добавьте MyView как владельца xib и свяжите розетки с подпредставлениями
  4. Убедитесь, что вашкласс MyView расширяет следующий класс CustomXibView, который вы можете добавить в свой проект (именно этот я использую в своем проекте)

    @IBDesignable
    class CustomXibView: UIView {
    
        @objc internal var defaultXib: String {
            return String(describing: type(of: self))
        }
    
        override init(frame: CGRect) {
            super.init(frame: frame)
            loadXib(xib: defaultXib)
        }
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
            loadXib(xib: defaultXib)
        }
    
        private func loadXib(xib: String) {
    
            // Load view
            let bundle = Bundle(for: type(of: self))
            let nib = UINib(nibName: xib, bundle: bundle)
            let contentView = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
    
            // use bounds not frame or it'll be offset
            contentView.frame = bounds
    
            // Make the view stretch with containing view
            contentView.autoresizingMask = [UIViewAutoresizing.flexibleWidth, UIViewAutoresizing.flexibleHeight]
    
            // Make sure layout uses superview margins
            preservesSuperviewLayoutMargins = true
    
            // Adding custom subview on top of our view
            addSubview(contentView)
        }
    }
    
  5. Если вы хотите создать свой вид, просто инициализируйте его с помощью MyView()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...