2016-11-25 5 views
0

Я создал собственный подкласс UIView, который должен работать как всплывающее диалоговое окно. Я хочу быть очень многократно используемым, поэтому я создал свой подкласс в собственном файле xib и устанавливал там ограничения автомаркета. В интерфейсе строителя это выглядит следующим образом:Пользовательский вид из xib добавлен в контроллер через построитель интерфейсов - сохраняйте ограничения автоопределения и изменяйте их размер

PhotoDetailInfoDialog.xib

Он должен изменить размер высоту текста в UITextView. Это мой пользовательский подкласс:

class PhotoDetailInfoDialog: UIView { 

    var view: UIView! 

    let nibName: String = "PhotoDetailInfoDialog" 

    @IBOutlet weak var titleLabel: UILabel! 
    @IBOutlet weak var mainTextView: UITextView! 
    @IBOutlet weak var bottomButton: UIButton! 

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

    required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    setup() 
    } 

    func setup() { 
    view = loadViewFromNib() 

    view.frame = bounds 
    view.autoresizingMask = [UIViewAutoresizing.flexibleWidth, UIViewAutoresizing.flexibleHeight] 

    addSubview(view) 
    } 

    func loadViewFromNib() -> UIView { 
    let bundle = Bundle(for: type(of: self)) 
    let nib = UINib(nibName: nibName, bundle: bundle) 
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView 
    return view 
    } 
} 

В строителе интерфейса для контроллера, где я хочу, чтобы использовать его, я добавил вид и установить класс к моему PhotoDetailInfoDialog.

Controller in interface builder with PhotoDetailInfoDialog

(После того, как снимок экрана я добавил ограничение ширины). Как правильно установить, что на высоте контроллера пользовательского представления будет динамически пересчитываться ограничениями в пользовательском xib (и, возможно, без ошибок в построителе интерфейса)?

В моем случае я поставил в коде много строк текста для UITextView но он показывает следующее: How it looks like now when run

Спасибо за помощь

ответ

0

Вы не можете установить класс view «s к customView, которые уже имеет .xib который в вашем storyboard.

Потому что в xib он уже создал interface для PhotoDetailInfoDialog.

Если вы перетащите view в storyboard и установите для этого класса PhotoDetailInfoDialog, наступит issue. и вы можете снова запустить свой проект, он сработает с EX_BAD_ACCESS.

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