Как в iOS подключить метку к представлению с помощью раскадровки?

Я делаю простое приложение для iOS и видел, что вы можете подключить ярлык к контроллеру представления с помощью раскадровки, удерживая кнопку управления и перетаскивая его от ярлыка к контроллеру представления, создавая IBOutlet. Мне нравится, насколько это удобно.

Мне интересно, как сделать IBOutlet для представления, не контроллера представления. Я создал индивидуальный вид и поместил на него несколько меток. Я хочу, чтобы на эти метки ссылался мой класс view, а не контроллер представления. Но XCode, похоже, не позволяет мне создать IBOutlet, если я не перетащу его на контроллер представления. Это можно обойти?

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

О возможном дубликате: мой вопрос касается попытки подключить Lable (или действительно любой элемент управления) к представлению, а не к контроллеру представления с помощью раскадровки. Связанный вопрос не является конкретным и больше похож на нового пользователя, который обращается за помощью с помощью xcode. Принятый ответ на мой вопрос бесполезен.


person jabe    schedule 03.03.2017    source источник
comment
Вы многое узнаете о том, что делать, из этого ответа: stackoverflow.com/questions/9282365/ - в значительной степени вы создаете Xib и собственный класс UIView и используете этот класс в качестве владельца файла xib, а затем используете помощник редактора с выбранным xib, и вы можете перетаскивать такие свойства, как раскадровка.   -  person Fred Faust    schedule 03.03.2017
comment
По этому поводу есть много руководств. Просто выполните поиск в Google.   -  person Starlord    schedule 03.03.2017


Ответы (3)


Мне кажется, что это обходной путь, но если вы сначала добавите выход в свой класс пользовательского представления, вы можете присоединить выход, перетащив из Referencing Outlet в XCode обратно в представление в раскадровке

class CustomView: UIView
{
    @IBOutlet weak var lblOne: UILabel!

    // do all the other stuff you need
}

введите здесь описание изображения

person Russell    schedule 03.03.2017
comment
Это прекрасно работает. Это действительно похоже на обходной путь, как вы думаете, это скрыто намеренно? Или вы думаете, что это просто причуда XCode? - person jabe; 03.03.2017

У вас есть ViewControler, созданный с некоторыми объектами в нем (UILabel, UIButton, UIImage ...)

введите описание изображения здесь

1 - Вам необходимо связать ViewControler в раскадровке с ViewController.swift, для этого следуйте картинкам.

введите описание изображения здесь

2 - В поле класса укажите имя класса ViewController. с этим вы только что связали свой контроллер представления storyBoard со своим классом viewController.swift

введите описание изображения здесь

3 - Теперь вам нужно создать переменные, которые вы хотите присвоить (UILabel, UIButton ... которые у вас есть в раскадровке): в этом примере:

`class MovieDetailViewController: UIViewController, DetailView {

var presenter: MovieDetailPresenter!
var movie: Movie?

@IBOutlet weak var lblMovieYear: UILabel!
@IBOutlet weak var lblMovieTitle: UILabel!
@IBOutlet weak var movieImage: UIImageView!
@IBOutlet weak var lblMovieRating: UILabel!
@IBOutlet weak var lblMovieOverview: UILabel! 

}`

4 - Чтобы связать UILabel в раскадровке с вашей переменной UILabel или ваш UIButton на раскадровке с вашей UIButton var, следуйте следующим изображениям

Сначала выберите контроллер представления в раскадровке

введите описание изображения здесь

Во-вторых, выберите значок parragraf в правом верхнем углу и нажмите «Помощник», откроется экран вашего ViewControler.swift.

введите описание изображения здесь  введите описание изображения здесь

Теперь yopu просто нужно перетащить переменную в соответствующий объект, и все готово. введите описание изображения здесь

ПОМНИТЕ ЭТО СО ВСЕМИ ПЕРЕМЕННЫМИ, ВАМ НУЖНО СОЗДАТЬ ПЕРЕМЕННУЮ ДЛЯ КАЖДОГО ОБЪЕКТА, КОТОРЫЙ У ВАС ИМЕЕТСЯ В ПАНЕЛИ.

person Iker Solozabal Granados    schedule 07.10.2020

сначала вам нужно взять родительский вид в раскадровке (посмотреть, где вы добавляете метки, и объявить, что это представление является представлением класса, который у вас есть в коде). Предположим, вы создадите класс MyView, который наследуется от UIView, затем вы перейдете в раскадровку, щелкните это родительское представление в раскадровке, где находятся ваши метки, и в правом разделе выберите класс и напишите там имя вашего ранее созданного класса (MyView) - автозаполнение должно сработать. затем откройте раскадровку с одной стороны и свой класс MyView с правой стороны, и вы можете перетащить ссылку точно так же, как с ViewController

person Marek Staňa    schedule 03.03.2017
comment
Это именно то, что я пытался сделать в первую очередь. Работает ли это для вас? - person jabe; 03.03.2017
comment
Да, у меня это работает. У вас есть ошибка или проблема? - person Marek Staňa; 03.03.2017
comment
Я настроил это так, как ты сказал. В моем представлении есть собственный класс MyView. Когда у меня раскадровка слева, а интерфейс MyView справа, я не могу перетаскивать метки внутри представления для создания IBOutlet. Он отлично работает, если я перетаскиваю из раскадровки на свой контроллер представления, но именно поэтому я запутался. - person jabe; 03.03.2017