Подтвердить что ты не робот

Невозможно подключить IBOutlet в Interface Builder

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

Любые идеи?

4b9b3361

Ответ 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, затем подключен из файла к метке в раскадровке, и он сработает!