Хорошо, я думаю, вы спрашиваете, что у вас есть uiview со стеком внутри него, MyCustomUIView. Вы хотите повторно использовать это представление три раза на одном и том же контроллере представления MyViewController и каждый раз загружать в него разные данные. Это правильно?
Если это та настройка, которую вы хотите, вы устанавливаете для всех выходов значение MyCustomUIView. В MyViewController вы создаете три выхода для трех ваших представлений (view1, view2, view3) и программно загружаете MyCustomView в каждое представление (view1, view2, view3), а затем получаете доступ к меткам и другим выходам из этих представлений как view1.label, view2.label и т. д. Это было бы проще/чище, если бы вы использовали xibs вместо раскадровки, кстати. Лично я бы сделал это, но если ваш проект основан на раскадровке, вы можете оставить MyViewController на раскадровке и создать xib для MyCustomUIView, а затем загрузить его, как я описал выше.
Другой способ настроить это в раскадровке — использовать UITableView на MyViewController с 3 ячейками вместо трех ваших UIView. Как правило, это был бы предпочтительный способ для повторного использования представлений по многим причинам. Одной из причин может быть то, что если вы когда-нибудь захотите 4 представления или только 2, это очень просто изменить. Вам не нужно менять все UI/ограничения в MyViewController.
Чтобы ответить на ваше беспокойство по поводу программных ограничений... да, это боль. Однако Apple добавила якоря, которые можно использовать для упрощения программных ограничений макета: https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UILayoutGuide_Class_Reference/index.html#//apple_ref/doc/uid/TP40015257-CH1-DontLinkElementID_13
Или вы можете использовать какаопод PureLayout, который еще больше упрощает работу: https://github.com/PureLayout/PureLayout
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
Если вы используете xib и добавляете его программно, вы должны сделать следующее:
Создайте файл класса Cocoatouch
На следующем экране сделайте его UIViewController и отметьте «Также создать файл XIB».
Затем в MyViewController:
view1 = NSBundle.mainBundle().loadNibNamed(String(MyCustomView), owner: nil, options: nil).first as! MyCustomView
view1.someLabel.text = "set the text"
view2 = NSBundle.mainBundle().loadNibNamed(String(MyCustomView), owner: nil, options: nil).first as! MyCustomView
view2.someLabel.text = "set the text"
view3 = NSBundle.mainBundle().loadNibNamed(String(MyCustomView), owner: nil, options: nil).first as! MyCustomView
view3.someLabel.text = "set the text"
Помимо использования представления таблицы или представления коллекции, как вы упомянули в своем комментарии, я на самом деле не знаю, как иметь повторно используемое представление (или, если это возможно) в раскадровке только без xibs. Возможно, если это возможно, кто-то еще ответит :)
Теперь, когда у вас есть эта основная информация, погуглите о xib, если вы все еще запутались. Найдите переполнение стека для «добавить xib swift», и вы найдете много результатов. И, конечно же, ответьте, если у вас есть еще вопросы!
person
Abbey Jackson
schedule
01.03.2016