Раскадровка 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. Одна странная вещь, которую я сделал, это изменить все имена пользовательских классов и снова построить проект. Это сработало!


