Ответ 1
Два способа найти решение проблемы, но они работают. 1. Просто введите имя диспетчера представлений в текстовое поле или 2. закройте проект, а затем снова откройте его и в инициализации проекта он поместит файл в список.
У меня есть UIViewController, который я создал в раскадровке моих приложений, а также пользовательский подкласс UIViewController, который я добавил в проект (и правильно на этапе компиляции для моей цели). Однако, когда я собираюсь установить свойство "Пользовательский класс" на контроллере представления в Storyboard, мой пользовательский класс не отображается в списке.
Что может привести к тому, что мой класс не появится в раскрывающемся списке "Пользовательский класс"?
Два способа найти решение проблемы, но они работают. 1. Просто введите имя диспетчера представлений в текстовое поле или 2. закройте проект, а затем снова откройте его и в инициализации проекта он поместит файл в список.
Если у вас все еще есть проблема или у тех, у кого может быть такая же проблема:
Обязательно выберите в своем раскадровке свой "ViewController" вместо "View" (который автоматически выбирается при нажатии на просмотр в раскадровке). Разница между этими двумя заключается в том, что когда выбран контроллер просмотра, вокруг вашего приложения появляется синий прямоугольник. Чтобы выбрать контроллер вида, откройте контур документа и выберите его прямо в иерархии раскадровки.
Я бы попробовал следующее:
.m
для построения фаз (если его еще нет).Вы можете исправить это, отредактировав XML своей раскадровки.
Щелкните правой кнопкой мыши по вашей записи My.storyboard
на панели "Навигатор проекта" и выберите пункт "Открыть As- > SourceCode". Найдите запись в контроллере представления в XML и добавьте атрибут customClass="MyController"
.
Сохраните раскадровку.
Снова щелкните правой кнопкой мыши на вашей записи My.storyboard
на панели "Навигатор проекта" и выберите "Открыть как > " - "Конструктор интерфейса - раскадровка".
Пользовательская запись класса теперь будет содержать ваше имя класса MyController
.
Убедитесь, что ваш класс наследуется от UIViewController.
@interface ClassName : UIViewController
В Xcode 8 некоторые из моих классов имели неправильный путь (с учетом регистра), указанный для расположения файлов.
MyProject/mysubdirectory/MyViewController.xib (.m, .h)
vs:
MyProject/mysubdirectory/MyViewController.xib (.m, .h)
На самом деле не уверен, как это закончилось в этом состоянии, но мой проект показал то же самое поведение, что и выше (не отображает выходы/действия в IB), и исправление этого пути устраняет проблему.
Я исправил это два разных способа. Один из способов был: я открыл файл .pbxproj и исправил проблему, чувствительную к регистру, вручную. Другой способ, который работал, - щелкнуть значок папки в разделе "Идентификация и тип" на вкладке "Инспектор файлов" файла и повторно выбрать файл там.
У меня были те же проблемы, что и в этой проблеме. Однако ни один из предложенных ответов не исправил это для меня. Мой проект скомпилирован без предупреждений или ошибок, но в файле .h не было индикаторов "выхода", указывающих на то, что мои выходы были связаны с элементами раскадровки.
Кроме того, попытки создания новых точек в моем коде, щелкнув правой кнопкой мыши и перетащив в мой заголовочный файл, не распознали мой источник заголовка как потенциальную цель для этой операции. Кроме того, мой класс не появился в раскрывающемся списке Custom-Class для панели инспектора свойств ViewController.
И все же проект скомпилирован в порядке.
Более тщательное обследование показало, что я определил свой класс следующим образом...
@interface KJBMainDataViewTrackConMk2<UIScrollViewDelegate> : UIViewController
который, по-видимому, компилируется красиво.
Но если это будет изменено на следующее (перемещение протоколов до конца)...
@interface KJBMainDataViewTrackConMk2 : UIViewController<UIScrollViewDelegate>
Тогда все оживает. Все выходы внезапно обозначаются как "связанные" с элементом раскадровки. И перетаскивание правой кнопкой мыши снова начнет работать, и мой пользовательский класс появится в раскрывающемся списке пользовательского класса на панели инспектора свойств для раскадровки ViewController!
Другие ответы здесь, вероятно, являются наиболее вероятными причинами этого состояния, но я чувствовал, что стоит упомянуть хотя бы эту еще одну потенциальную причину.
Нажмите на другой контроллер представлений в раскадровке, затем нажмите на него, чтобы подтвердить, что новый класс указан, но не выбирайте его. Вернитесь на новый контроллер просмотра, который вы создали, и вы увидите, что он теперь указан в раскрывающемся меню пользовательского класса. нечетный, а? просто заставляет обновить, я думаю.
У меня была та же проблема, но ни один из других решений не работал у меня. Проблема для меня заключалась в том, что у меня была цель Mac и iOS, как со своими версиями одного и того же контроллера. Например, у меня была пара файлов .h/.m с именем FooViewController для Mac и другая .h/.m пара файлов с именем FooViewController для iOS. Каждая пара была правильно включена в их соответствующие цели, но по какой-то причине Xcode не нравится, и мой контроллер просмотра не будет отображаться в раскрывающемся списке Custom Class в контроллере представления в раскадровке. В итоге я переименовал свой класс в контроллер представления iOS, и он сразу появился в раскрывающемся списке.
В моем случае я перетаскиваю новый объект TableViewController в раскадровку, но добавляю новый файл, подклассом которого является "UIViewController".... Затем я добавляю файл, подклассом которого является "UITableViewController", проблема решена!
Мне довелось столкнуться с этой проблемой и не повезло, попробовав предыдущие предложения. Наконец, я обнаружил, что тип файла заголовка установлен на C++ header
. После изменения его на C header
(как и все другие файлы заголовков) класс появляется в списке. Не знаю, почему, хотя... Возможно, полезно для других, поэтому я размещаю его здесь.
Для тех из вас, кто все еще испытывает эту проблему после того, как ViewController
все вокруг, возможно, потому что вы нажали View
вместо ViewController
.
Вы должны выбрать файл при нажатии ViewController
.
Это решило мою проблему.
сначала не добавляйте CustomViewController в любую группу или папку. поместите его в корень вашего приложения.
Ни один из вышеперечисленных (или ниже:) не помог мне. хотя я обнаружил, что
если я выберу свой viewcontroller в раскадровке и попытаюсь присвоить ему свой класс - мой класс не существует
НО
если я нажму на представление, которое находится в самом представлении управления, затем щелкните раскрывающееся меню класса в пользовательском классе
И ТОГДА
выберите viewcontroller (нажмите на панель под диспетчером просмотра), а теперь снова щелкните раскрывающийся список класса в пользовательском классе, который появился в моем новом добавленном классе.
странно, должно быть, ошибка с освежающим. Версия Xcode 5.1 (5B130a)
Убедитесь, что вы выбрали View Controller, к которому вы хотите присоединить свой класс. Легкий способ открыт Document Outline
и выбрать ваш контроллер представления (когда вы нажимаете на него, формальная раскладка иногда просто не выбирает объект, который вы имели в виду).
Storyboard ищет пользовательский класс, но физически его нет, и он не отображает имя пользовательского класса в списке, а также не отображает выходы. Следующее решение отлично сработало для меня.
для моего случая, как-то связать ресурсы, которые были удалены, поэтому я добавил обратно и работает!
Фазы сборки → Добавить фазу сборки → Скопировать ресурсы Bundle найти файл Затем перетащите туда файл
Затем убедитесь, что ваше целевое членство проверено.
В моем случае я выбрал неправильный интерфейс, поэтому я удалил файл класса и создал новый и выбрал правильный родительский класс
Мне пришлось перезапустить XCode 7.3 (7D175)
Что для меня работало, это щелкнуть по файлу в Навигаторе проектов, затем в Инспекторе файлов в разделе "Идентификация и тип" под раскрывающимся списком "Расположение" щелкните значок маленькой папки, а затем выберите файл в всплывающее окно.
Попробуйте очистить проект, а также перезагрузите Mac. Одна из особенностей, которую я сделал, - это изменить все имена пользовательских классов и снова создать проект. Это сработало!
Для проектов macOS
создание нового класса генерирует класс, наследуемый от NSObject
вместо этого на NSViewController
.
Меняться от
import Cocoa
class AppsViewController: NSObject {
}
в
import Cocoa
class AppsViewController: NSViewController {
}
Я был довольно разочарован этой проблемой, поскольку ни один из ответов выше не решил мою проблему.
В моем случае: я работал над файлом контроллера быстрого просмотра и делал активные изменения (например, создавал собственный класс ячейки коллекции). Я не закончил блок кода и оставил его открытым вот так:
class tableViewCell: UITableViewCell {
}
class collectionCell:
class viewController: UIViewController {
override func viewDidLoad(){
super.viewDidload()
}
}
Обратите внимание на неполный кодовый блок collectionCell2 Этого было достаточно для xcode, чтобы не распознавать мой файл viewController как таковой. Как только я закончил этот блок, файл снова появился в моем xcode как опция.
Очень глупо и просто.
Убедитесь, что имя класса ViewController
- это имя, которое вы хотите. т.е.
class MyCustomNameViewController: UIViewController {
.
.
}
Изменение имени файла недостаточно.