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

Невозможно создать выходные соединения с субблоками в 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

4b9b3361

Ответ 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%, то выходное соединение не будет работать.