Невозможно подключить IBOutlet в Interface Builder
У меня странный опыт. Я создаю приложение iPhone любого типа, добавляю UIViewController с Xib файлом. Я могу отредактировать файл xib с элементами управления и увидеть их рендеринг, если я запустил. Теперь я пытаюсь добавить несколько IBOutlets к контроллеру, поэтому я добавляю их в файл .h, синтезируя файл .m. Затем я направляюсь к Interface Builder для подключения выходов. Я перетаскиваю UILabel в UIView, а затем я пытаюсь подключить File Owner (который мой пользовательский UIViewController), но все, что я могу выбрать, когда я пытаюсь подключиться к UILabel, является "представлением", которое является явно ошибочным. Поэтому я не могу подключить IBOutlets к своим элементам управления в Interface Builder.
Любые идеи?
Ответы
Ответ 1
Я сделал комбинацию вещей в этой теме, и я наконец добился успеха.
В конструкторе интерфейса (не xcode)
- Файл- > Обновить все файлы классов
- Файл- > Чтение файлов классов (выберите MyClass.h)
- Подключить владельца файла с помощью
а. Установка класса на "MyClass"
б. Повторное подключение представления "Вид к файловому владельцу"
Теперь все в порядке. Weird.
Надеюсь, что это помогает больше, чем смущает; -)
Ответ 2
В интерфейсе Builder File- > Read Class Files и укажите его в класс File Owner. Это исправило это для меня.
Ответ 3
Имела ту же проблему.
Исправлено, дважды проверяя атрибут "Класс" Файлового Владельца в Инспекторе Identity.
Ответ 4
Вы уверены, что владелец файла правильно настроен на ваш пользовательский UIViewController и что вы сохранили ваш файл .h
после добавления ключевого слова IBOutlet
к переменной экземпляра и свойству?
Ответ 5
У меня была такая же проблема, как и у вас. Я не знаю, разрешила ли вы свою проблему, но мое дело в том, что я изменил все имена классов, включая viewcontroller, но имя владельца файла остается неизменным. Таким образом, я дважды щелкнул File owner → click я в открывшемся окне → измените имя в поле Class на новое имя диспетчера. Тогда это сработало. Возможно, вы хотите попробовать еще раз и посмотреть, работает ли это. Удачи.
Ответ 6
Убедитесь, что вы определяете свои точки в файле .h как соответствующий тип? Если вы пытаетесь подключить текстовое поле в IB, тогда ваш .h файл должен выглядеть примерно так...
IBOutlet UITextField *MyTextField;
Убедитесь, что тип UITextField (или UITextView и т.д.). Если вы наберете их как NSString или что-то, что вам не подходит, вы не сможете подключить их в Interface Builder....
Ответ 7
Если вам не удалось подключить элементы управления пользовательским интерфейсом к коду с помощью правого щелчка (или CTRL) → выпадающего списка, существует другой способ. В построителе интерфейса нажмите и удерживайте CTRL, мышь с мышью от "Владелец файла" в главном окне Interface Builder до вашего элемента управления UI (ярлык, кнопка и т.д.). Отобразится список dpopdown со всеми определенными вами Outlets. Просто нужен один!
Ответ 8
У меня была такая же проблема для LONGEST. Изменение моего владельца файла "Тип" на "MyClassViewController" вместо "UIViewController" в окне идентификации класса устранило мою проблему. Это имеет смысл, поскольку поскольку тип владельца файла - UIViewController, он будет показывать только те свойства, которые относятся к базовому классу. Изменение типа в MyClassViewController дает доступ к его выходам и всем унаследованным экземплярам. Надеюсь, это поможет!
Ответ 9
File->Read Class Files (select MyClass.h)
Работала для меня.
Ответ 10
XCode -> Product -> Clean
Работал для меня.
Ответ 11
У меня была та же проблема, и я просто попробовал предложение diatrevolo: Нажмите "Файл", затем "Прочитайте файлы классов" и укажите свой класс "Владелец файла".
Это исправило это для меня. Я бы добавил +1 diatrevolo, но у меня пока нет репутации...
Ответ 12
убивает меня каждый раз, но иногда, если вы просто закрываете и снова открываете xcode, все исправлено... Просто случилось со мной с этой точной проблемой...
Ответ 13
Для меня проблема заключалась в том, что я создал MyUITextView
расширение UITextView
, а X-Code не будет подключаться.
Мое обходное решение заключалось в том, чтобы временно использовать UITextView
в IBOutlet для подключения/ссылки, а затем перейти к своему пользовательскому представлению.
Итак, я изменился.
IBOutlet MyUITextView *tv;
to
IBOutlet UITextView *tv;
а затем подключен/связан.
После подключения я изменил свой OBOutlet на MyUITextView
IBOutlet MyUITextView *tv;
Ответ 14
Перезапуск Xcode 5.1 сделал это для меня.
Ответ 15
Так что я точно не знаю, почему он не создает соединения IBOutlet автоматически, но я нашел обходное решение. Мне пришлось вручную добавлять выходы через библиотеку в Interface Builder для моего контроллера просмотра клиентов. Если кто-нибудь найдет исправление, чтобы сделать его автоматически прочитанным из файла .h(как и предполагалось), я был бы очень благодарен, если бы они разместили его.
Благодарю вас
Ответ 16
В этом я новичок, и у меня была такая же проблема. Я пошел, чтобы попробовать предложение diatrevolo, и, при этом, узнал, что вызывает мою проблему. Первоначально я создал свой ViewController где-то случайным в иерархии проекта, а затем переместил их в папку классов. Это означало, что фактические файлы не были в папке классов, но проект думал, что они есть, поэтому IB смотрел не в том месте. Я переместил фактические файлы в фактический файл классов с помощью Finder, а затем удалил и перечитал их в проекте. Тогда все сработало!
Ответ 17
После того, как я локализовал некоторые файлы XIB, представления не реагировали на обновления, сделанные в Interface Builder. Простое решение было , чтобы удалить приложение из симулятора/устройства. Следующий Build & Run корректно обновил приложение.
Это произошло только при развертывании приложения через XCode на симуляторе. Кажется, что XCode пытается оптимизировать сборку и запутывается.
Ответ 18
У меня тоже были проблемы, и в итоге мне пришлось создавать приложение до открытия Interface Builder. Voodoo!
Ответ 19
Я написал
@IBOutlet weak var title: UILabel!
в текстовом файле UIViewController, затем подключен из файла к метке в раскадровке, и он сработает!