Не удается подключить IBOutlet в Построителе интерфейса

У меня странный опыт. Я создаю любой тип приложения для iPhone, добавляю UIViewController с файлом Xib. Я могу редактировать xib-файл с помощью элементов управления и видеть их визуализацию при запуске. Теперь я пытаюсь добавить несколько IBOutlets к контроллеру, поэтому я добавляю их в .H-файл, синтезировать на .m-файл. Затем я направляюсь в Interface Builder для подключения розеток. Я перетаскиваю UILabel в UIView, а затем пытаюсь подключить владельца файла( который мой пользовательский UIViewController), но все, что я могу выберите, когда я пытаюсь подключиться к UILabel, "view", что явно неправильно. Поэтому я не могу подключить IBOutlets к их элементам управления в Interface Builder.

какие идеи?

19 ответов


Я сделал комбинацию вещей в этой теме, и у меня, наконец, был успех.

в Построителе интерфейса (не xcode)

  1. File - >Перезагрузите Все Файлы Классов
  2. File - >Read Class Files (выберите MyClass.h)
  3. переподключить владельца файла по
    a. Установка класса в "MyClass"
    б. Повторное представление владельцем файла вида

все вернулось в норму. Странный.

надеюсь, это поможет более чем смущает ; -)


in Interface Builder File - >Read Class Files и укажите его на класс владельца вашего файла. Это все исправило.


была та же проблема.

исправлено путем двойной проверки атрибута "Class" владельца Моего файла на инспекторе идентификации.


вы уверены, что владелец файла правильно настроен на ваш пользовательский UIViewController и что у вас есть спас код .h файл после добавления IBOutlet ключевое слово в переменную и собственность?


У меня была почти такая же проблема, как вы делали. Я не знаю, решили ли вы свою проблему, но я изменил имена всех классов, включая viewcontroller, но имя владельца файла остается неизменным. Итак, я дважды щелкнул владельца файла - > нажмите i в открывшемся окне - > измените имя в поле Class на новое имя viewcontroller. Потом сработало. Может, попробуешь еще раз и увидишь, что получится. Удача.


вы убедились, что определяете свои розетки в своем .H файл как соответствующий тип? Если вы пытаетесь подключить текстовое поле в IB, то ваш .файл h должен выглядеть примерно так...

IBOutlet UITextField    *MyTextField;

убедитесь, что тип UITextField (или UITextView и т. д.). Если вы вводите их как NSString или что-то не подходит, то вы не можете подключить их в Interface Builder....


Если вам не удалось подключить элементы управления пользовательского интерфейса к коду с помощью правой кнопки мыши (или CTRL)- > выпадающий список, есть другой способ. В interface builder нажмите и удерживайте CTRL, drug mouse от "владельца файла" в главном окне Interface Builder до элемента управления UI (метка, кнопка и т. д.). Список dpopdown с всех заданных вами точек появилась. Просто выбор нужен!


У меня была такая же проблема дольше всего. Изменение владельца Моего файла " Type "на" MyClassViewController "вместо" UIViewController " в окне идентификатора класса исправило мою проблему. Это имеет смысл, потому что, поскольку тип владельца файла-UIViewController, он будет показывать только те свойства, которые относятся к базовому классу. Изменение типа на MyClassViewController дает доступ к его выходам и всем унаследованным экземплярам. Надеюсь, это поможет!


File->Read Class Files (select MyClass.h) сделал работу за меня.


XCode -> Product -> Clean

работал для меня.


У меня была та же проблема, и я просто попробовал предложение diatrevolo: нажмите Файл, затем прочитайте файлы классов и укажите класс владельца вашего файла.

это фиксированная это для меня. Я бы +1 diatrevolo, но у меня еще нет никакой репутации...


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


для меня проблема заключалась в том, что я создал MyUITextView расширения UITextView и X-код не подключения. Мое решение было использовать UITextView в IBOutlet временно подключиться / ссылка, а затем перейти к моему пользовательскому представлению.

поэтому я переоделся.

IBOutlet MyUITextView *tv;

to

IBOutlet UITextView *tv;

и затем соединены/ связаны между собой. После подключения я изменил свой OBOutlet обратно на MyUITextView

IBOutlet MyUITextView *tv;

перезапуск Xcode 5.1 сделал это за меня.


поэтому я точно не знаю, почему он автоматически не делает соединения IBOutlet, но я нашел обходной путь. Мне пришлось вручную добавить розетки через библиотеку в Interface Builder для моего контроллера представления клиента. Если кто-то найдет исправление, чтобы оно автоматически считывалось из .H файл (как и предполагалось), я был бы очень признателен, если бы они опубликовали его.

спасибо


Я полный новичок в этом, и у меня была та же проблема. Я пошел, чтобы попробовать предложение диатреволо, и, делая это, выяснил, что вызвало мою проблему. Первоначально я создал свой ViewController где-то случайным образом в иерархии проектов, а затем переместил их в папку classes. Это означало, что фактические файлы не были в папке classes, но проект думал, что они были, поэтому IB искал в неправильном месте. Я переместил файлы в файл classes с помощью Finder, а затем удалил и прочитал их в проекте. Тогда все сработало!


после локализации некоторых XIB-файлов представления не реагировали на обновления, сделанные в Interface Builder. Простое решение было удалить приложение из симулятора / устройства. Следующая сборка и запуск обновили приложение правильно.

Это произошло только при развертывании приложения через XCode на симуляторе. Похоже, XCode пытается оптимизировать сборку и запутывается.


У меня тоже были проблемы, и то, что в конечном итоге работало для меня, было создать приложение до открытия Interface Builder. Вуду!


Я написал

@IBOutlet weak var title: UILabel!

в текстовом файле UIViewController затем подключается из файла к метке в раскадровке, и это сработало!