Как получить доступ к UIView внутри UIView - PullRequest
1 голос
/ 20 января 2012

Я новичок в разработке для iOS, и мне было интересно, можно ли вообще получить доступ к UIView из UIView.

Моя текущая настройка заключается в том, что у меня есть основной UIViewController с UIView. В этом UIView у меня есть меньшее UIView, которое я использую для отображения информации об отладке. Что я хотел бы сделать, так это иметь возможность каким-то образом получить доступ к этому представлению, чтобы я мог либо видеть / скрывать его, когда мне нужно, либо даже менять цвет фона, если я пытаюсь отладить логическую ошибку.

Я пытался получить к нему доступ через self.view, но это просто дает мне родительское представление. Я видел на различных сайтах и ​​в учебных пособиях, что мне нужно добавить его в подпредставление и работать оттуда, но когда я это делаю, представление устанавливается в 0x0. Я также увидел, что мне нужно использовать IBOutlet, и в IB мне нужно где-то ссылаться на него, но я понятия не имею, как это сделать, поскольку я не вижу свой объект, который я определил в заголовочном файле моего контроллера, где-нибудь в IB.

Любой совет будет принят с благодарностью.

Ответы [ 5 ]

4 голосов
/ 20 января 2012

Если вы хотите получить доступ ко второму UIView через IB:

  • Убедитесь, что он добавлен в Интерфейсном Разработчике к вашему корневому представлению
  • Создайте выход в вашем ViewController с помощью @property (nonatomic, retain) IBOutlet UIView *myView(конечно, синтезируйте его)
  • Подключите представление к вновь созданному выходу в Владельце файла в Интерфейсном Разработчике
  • Вуаля!Должен работать на данный момент - просто получить доступ к вашему представлению с помощью self.myView (если все правильно, он будет иметь значение не ноль)
1 голос
/ 20 января 2012

Данные ответы хороши, вот другой подход: дать представлению тег (целое число, например, «1»), а затем получить к нему доступ так:

UIView * viewToGet = [theMainView viewWithTag:1]

Вы можете назначить тегIB, а также в коде.

1 голос
/ 20 января 2012

Самый простой способ сделать это - установить IBOutlet в файле .h вашего ViewController, а затем подключить это встроенное представление (или подпредставление) к этому IBOutlet.

Затем вы можете включить или выключить свойство hidden, когда захотите.

Ознакомьтесь с этой документацией Apple , в которой описывается, как проектировать пользовательские интерфейсы с Xcode 4, уделяя особое внимание разделу «Соединения напрямую с исходным кодом».

0 голосов
/ 20 января 2012

Если вы создаете подпредставления в коде, вам нужно установить frame (происхождение и размер) дочернего элемента UIView и сделать [self.view addSubview:myChildView]. Вы можете использовать свойство или ивар для отслеживания этого пользовательского интерфейса, чтобы ссылаться на него позже, чтобы скрыть его.

Если вы используете файл xib и определяете дочернее представление внутри xib, тогда да, скорее всего, вы захотите определить IBOutlet для ссылки на элемент. Что-то вроде:

@property (nonatomic, retain) IBOutlet UIView * myChildView;

внутри вашей реализации вы захотите:

@implementation MyCoolViewController

@synthesize myChildView = _myChildView;

-(void) dealloc
{
   // make sure to release reference so the property gets cleaned up
   [_myChildView release], _myChildView = nil;
   [super dealloc];
}

-(void)someFunc
{
   self.myChildView.hidden = YES; // or NO
}

Внутри Интерфейсного Разработчика вам нужно будет назначить эту розетку для некоторого представления в вашей Xib. Как правило, вы делаете это, выбирая «Владелец», а затем в инспекторе соединений нажимаете на имя своего свойства и перетаскиваете его в UIView, которому вы хотите назначить его.

0 голосов
/ 20 января 2012

Ознакомьтесь с документацией для UIView .Вы обнаружите, что есть ряд методов, которые позволяют вам получить доступ к содержимому представления.Например, есть свойство subviews, которое предоставляет массив всех подпредставлений представления.Есть также метод -viewWithTag:, который будет возвращать указатель на подпредставление с указанным тегом.(Вы можете установить тег представления в любом виде в Интерфейсном Разработчике.)

Если иерархия представления создается в файле .xib или раскадровке, общий способ получить доступ к различным членамИерархия заключается в создании розеток (свойств, помеченных IBOutlet) в вашем контроллере и подключении этих розеток к соответствующим представлениям в .xib.В этом случае выходы будут заполнены правильными указателями вида при загрузке .xib.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...