Невозможно создать выходные соединения с субблоками в Interface Builder (Xcode 5)
Я знаю, что это похоже на дубликат некоторых других вопросов, но ответы не работают для меня.
- Я создал одно приложение для просмотра.
- В раскадровке я добавил subview к моему основному виду.
- У меня есть ярлык на моем основном представлении и еще один ярлык на моем подвью.
- Я создал класс типа UIView и добавил его как пользовательский класс для subview.
- Я могу ctrl-drag мой ярлык на моем основном представлении на основной класс контроллера. Но когда я пытаюсь ctrl-перетащить мой ярлык в свой subview в свой собственный класс, я не могу получить это соединение.
- Я даже набрал информацию о свойствах и попытался сделать подключение вручную безрезультатно.
В последней версии Xcode Interface Builder ситуация немного изменилась. Может ли кто-нибудь сказать мне, что мне не хватает? Здесь нет никакого кода. Я просто тестирую попытку подключения выходов к подзону с помощью специального класса.
Первое изображение показывает, что я настроил пользовательский класс и добавил свойство, но я не могу установить соединение.
![Main view and subview in Interface Builder - custom class is set]()
Второе изображение показывает, что основной вид метки подключен в главном контроллере.
![Main view and subview in Interface Builder - main view's label is connected]()
Третье изображение показывает, что нет выходных соединений для метки subview.
![Main view and subview in Interface Builder - cannot connect subview's label]()
Ответы
Ответ 1
Вы можете вручную записать объявление свойства IBOutlet
в @interface
подкласса пользовательского вида, и, предположив, что вы определили базовый класс вашего поднабора в IB, вы можете перетащить из кружка выхода в код назад к управлению в сцене.
![enter image description here]()
Или, как вы указываете, Уоррен Бертон предложил и эту технику, и другую в своем ответе на этот другой вопрос, Невозможно подключиться к Subview в IB.
Ответ 2
Проблема связана с владельцем файла контроллера просмотра. Вероятно, он настроен как IOViewController, поэтому вы можете создавать соединения свойств только в этом файле .h.
Что вы можете сделать, это создать другой .nib файл для подзаголовка и поместить туда подвью. Затем в этом .nib файле сделайте владельца файла IOSubview. Связь с недвижимостью будет работать там очень хорошо. Затем просто добавьте subview в IOViewController программно. Просто не забудьте сначала загрузить файл nib из пакета.
Ответ 3
Это то, что я сделал (в Swift):
- Я создал новый ViewController (например, класс MyViewController: UIViewController {})
- В StoryBoard я расширил "Сцены" (т.е. древовидное представление всех компонентов пользовательского интерфейса) и выбрал "MyViewController"
- Используя "инспектор идентификации", я назначил класс "MyViewController" (как против UIViewController по умолчанию)
После этого я смог назначить действие.
Я подозреваю, что для Obj-C это аналогичный процесс.
Ответ 4
Вы не создаете выходы в подклассе, вы создаете розетку на контроллере просмотра, в котором он включен. Вам нужно #import
подкласс в IDViewController.h и создать там выход.
IDViewController.h
#import "IDSubclass.h"
...
@property (strong, nonatomic) IBOutlet IDSubclass *outletName;
Ответ 5
Увеличьте свою раскадровку до 100%. Если вы уменьшите масштаб, скажем 50%, то выходное соединение не будет работать.