Программный доступ к подпредставлениям UIView, добавленным в Interface Builder.
Вопрос
У меня есть файл пера, в котором есть представление, содержащее фоновое изображение, кнопку и другое изображение, закрывающее весь экран (тень), которое необходимо переместить вперед.В представлении я создаю дочерние представления, а после их создания и добавления с помощью [self addView]
Мне нужно переместить теневое изображение вперед.
В настоящее время я использую атрибут tag, чтобы найти это представление, но думаю, что, возможно, есть лучший способ - идентифицировать подпредставления, которые я добавляю в Interface Builder, по некоторому имени.
Я пытаюсь добавить IBOutlet для соединения подпредставления с его родителем, но это не сработало (и не имело смысла, поскольку подпредставление уже каким-то образом связано со своим родителем).
Решение
А IBOutlets
способ должен работать, и, вероятно, это лучший способ сделать это.Убедитесь, что вы установили правильное соединение в Interface Builder после того, как объявили их в файле .h.
Другие советы
iPhone выполняет ленивую загрузку контроллеров представления.Перо могло не быть загружено в initWithCoder или какой-либо другой метод инициализации, как указал Кендалл.
viewDidLoad — предпочтительное место для доступа к чему-либо из пера, если вы хотите получить к ним доступ до отображения представления.
Надеюсь, это поможет.
В какой момент вы пытаетесь получить доступ к подпредставлениям?Если вы попытаетесь выполнить инициализацию ViewController, IBOutlets будет нулевым.Первый метод, который вы можете получить от них, — это, вероятно, viewDidLoad.
Причина, по которой такой подход действительно имеет смысл, заключается в том, что IBOutlet — это просто прямые указатели на какой-то компонент, даже если они уже являются подвидами чего-то другого.Просто экономит много охоты.
Использование тега — вполне допустимый способ найти определенные представления, если вы используете viewWithTag:метод.Если вы уже используете теги, нет необходимости переходить на IBOutlets, если только вам не нравится вызывать viewWithTag:.