Раскадровка uiviewcontroller, "пользовательский класс" не отображается в раскрывающемся списке
У меня есть UIViewController, который я создал в своей раскадровке приложений, а также пользовательский подкласс UIViewController, который я добавил в проект (и правильно находится на этапе компиляции для моей цели). Однако, когда я иду, чтобы установить' пользовательский класс ' свойство на вид-контроллер в раскадровке мой пользовательский класс не отображается в списке.
- проверено, что класс является частью цели моего приложения, а не тесты'
- проверил, что это правильно подкласс UIViewController
- скомпилированная программа, чтобы убедиться, что xcode работает с последней информацией
- перезапущен xcode
Что может привести к тому, что мой класс не будет отображаться в выпадающем списке "пользовательский класс"?
22 ответа:
два способа я нашел, что решить эту проблему, но они работают вокруг. 1. Просто введите имя контроллера вида в текстовом поле или 2. закройте проект, а затем снова откройте его, и при инициализации проекта он помещает файл в список.
Если у вас остались проблемы или для тех, кто может иметь ту же проблему:
убедитесь, что вы выбрали на своей раскадровке "ViewController" вместо "View" (который автоматически выбирается при нажатии на представление в раскадровке). Разница между ними заключается в том, что при выборе контроллера вида вокруг вашего приложения появляется синий прямоугольник. Чтобы выбрать контроллер вида, откройте контур документа и выберите его непосредственно в раскадровке иерархия.
Я бы попробовал следующее:
- проверьте, что файл, реализующий класс, является частью собрать фаз (регистрация по цель>собрать фаз)
- добавить до собрать фаз (если уже не).
- Перезапустить Xcode.
вы можете исправить это, отредактировав XML вашей раскадровки.
щелкните правой кнопкой мыши
My.storyboard
запись в Проект Навигатор панели и выберите Открыть Как->Исходный Код выбор меню. Найдите запись контроллера вида в XML и добавьте атрибутcustomClass="MyController"
.сохранить раскадровку.
щелкните правой кнопкой мыши
My.storyboard
запись в Проект Навигатор панель снова, и выберите Открыть Как - > Interface Builder-Storyboard выбор меню.запись пользовательского класса теперь будет содержать ваш
MyController
имя класса.
у меня были те же проблемы, как описано в этой задаче. Однако ни один из предложенных ответов не исправил его для меня. Мой проект скомпилирован ОК без предупреждений или ошибок, но, в том .H файл не было никаких индикаторов "розетки", чтобы указать, что мои розетки были связаны с элементами раскадровки.
кроме того, попытки создать новые выходы в моем коде, щелкнув правой кнопкой мыши и перетащив в мой файл заголовка, не распознали мой источник заголовка как потенциальную цель для этого операция. Кроме того, мой класс не появился в раскрывающемся списке пользовательского класса для панели инспектора свойств ViewController.
и все же, проект скомпилирован ок.
@interface KJBMainDataViewTrackConMk2<UIScrollViewDelegate> : UIViewController
который, по-видимому, хорошо компилируется.
но, если это изменено на следующее, (перемещение протоколов до конца)...
@interface KJBMainDataViewTrackConMk2 : UIViewController<UIScrollViewDelegate>
затем все возвращается к жизни. Все розетки внезапно обозначаются как "связанные" с элементом раскадровки. И щелкните правой кнопкой мыши перетаскивание начинает работать снова, и мой пользовательский класс появляется в раскрывающемся списке пользовательский класс на панели инспектора свойств для раскадровки ViewController!
другие ответы здесь, вероятно, представляют собой наиболее вероятные причины этого состояния, но я чувствовал, что это стоит упомянуть хотя бы одна возможная причина.
в Xcode 8 некоторые из моих классов имели неверный путь (с учетом регистра), указанный для их расположения файлов.
MyProject/mysubdirectory/MyViewController.xib (.m, .h)
vs:
MyProject/MySubdirectory/MyViewController.xib (.m, .h)
действительно не уверен, как он оказался в этом состоянии, но мой проект показал точно такое же поведение, как и выше (нет выходов/действий, отображаемых в IB), и исправление этого пути исправило проблему.
я исправил это двумя различными способами. Один путь был мимо я открыл .pbxproj файл и исправление вопроса с учетом регистра вручную. Другой способ, который работал, состоял в том, чтобы нажать значок папки под разделом Identity и Type вкладки File Inspector файла и повторно выбрать файл там.
нажмите на другой контроллер вида в раскадровке, а затем нажмите на его пользовательский класс выпадающий, чтобы подтвердить, что новый класс указан, но не выбирайте его. Нажмите кнопку назад на новом контроллере представления, который вы сделали, и вы должны увидеть его в списке в своем выпадающем меню пользовательского класса. странно, да? просто заставляет освежиться, я думаю.
У меня была та же проблема, но ни одно из других решений не работало для меня. Проблема для меня заключалась в том, что у меня была цель Mac и iOS, как с их собственными версиями одного и того же контроллера вида. Например, у меня был .ч./m пара файлов с именем FooViewController для Mac и другой .ч./m пара файлов с именем FooViewController для iOS. Каждая пара была правильно включена в свои соответствующие цели, но по какой-то причине Xcode не нравится, и мой контроллер вида не будет отображаться в пользовательском классе выпадающий список в контроллере вида в раскадровке. Я закончил переименование своего класса в контроллере представления iOS, и он сразу же появился в раскрывающемся списке.
в моем случае я перетаскиваю новый объект TableViewController в раскадровку, но я добавляю новый файл, подкласс которого является "UIViewController".... Затем я добавляю файл, который является подклассом "UITableViewController", проблема решена!!
я случайно столкнулся с этой проблемой, и не повезло после попытки предыдущих предложений. Наконец я нашел причину в том, что тип файла заголовка установлен в
C++ header
. После изменения его наC header
(как и все другие заголовочные файлы), класс появится в раскрывающемся списке. Хотя не знаю почему... Возможно, полезно для других, поэтому я размещаю его здесь.
убедитесь, что изначально не добавлять CustomViewController в любую группу или папку. поместите его в корень вашего приложения.
ни один из вышеперечисленных (или ниже :) не помог мне. хотя я нашел, что
- после добавления нового viewcontroller в раскадровку (просто перетащив его)
- и добавление моего класса по File\New\File\Objective-C Class, дайте ему имя, нет XIB, далее, Create
Если я выберу свой viewcontroller в раскадровке и попытаюсь назначить ему свой класс-моего класса там нет
но
Если я нажму на представление, которое находится в viewcontroller затем нажмите на выпадающее меню класса в пользовательском классе
А ТО
выберите viewcontroller (нажмите на панель под viewcontroller) и теперь снова нажмите на выпадающий список класса в пользовательском классе мой недавно добавленный класс волшебным образом появляется.
странно, должно быть ошибка с освежающим. Xcode версии 5.1 (5B130a)
убедитесь, что вы выбрали контроллер вида, к которому хотите прикрепить свой класс. Самый простой способ это открыть
Document Outline
и выберите свой контроллер вида (когда вы нажимаете на него, образуя раскадровку, иногда он просто не выбирает объект, который вы имели в виду).
раскадровка ищет пользовательский класс, но физически его нет, и он не отображает имя пользовательского класса в списке, а также не отображает выходы . Следующее решение отлично сработало для меня.
- просто скопируйте свой код где-нибудь еще.(Допустим на рабочем столе)
- откройте существующий код.
- удалите файл пользовательского класса.(Переместить в корзину)
- Теперь добавьте файлы из скопированной папки проекта (из рабочего стола)
- не забудьте установить флажок "копировать при необходимости"
- откройте доску истории и бинго вы получите ваши пользовательские файлы класса в выпадающем меню
для моего случая каким-то образом ресурсы пакета были удалены, поэтому я добавил обратно и работал!
Фазы Сборки - > Добавить Фазу Сборки - > Копировать Ресурсы Пакета найдите свой файл Затем перетащите ваш файл туда
затем убедитесь, что ваша целевая членство.
в моем случае, я выбрал неправильный интерфейс.. поэтому я удалил файл класса и создал новый и выбрал правильный родительский класс
Что сработало для меня, нажмите на файл в навигаторе проекта, затем в Инспекторе файлов в разделе "идентификация и тип" под раскрывающимся списком "местоположение", нажмите на значок маленькой папки, а затем выберите файл во всплывающем окне.
попробуйте очистить свой проект, а также перезагрузить компьютер Mac. Одна странная вещь, которую я сделал, это изменить все имена пользовательских классов и снова построить проект. Это сработало!