2012-01-19 4 views
0

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

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

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

Любые советы были бы весьма полезными.

ответ

4

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

  • Убедитесь, что он добавлен в Interface Builder на ваш взгляд корневой
  • создать отверстие в вашем ViewController с @property (nonatomic, retain) IBOutlet UIView *myView (конечно, синтезировать его)
  • Подключите View к вашей вновь созданной розетке у владельца файла в интерфейсе Builder
  • Voila! Должен работать на данный момент - только доступ ваш взгляд с self.myView (если все правильно, это будет иметь значение не-ноль)
+0

+1 Хороший лаконичный ответ – Sam

+0

Отлично! Огромное спасибо. Я даже не знал, что могу сделать это с Владельцем Файла. – Seb

1

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

Тогда вы можете установить свойство hidden в любое время, когда захотите.

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

+0

+1 Несмотря на попытки объяснить это, я думаю, что документы - это лучшее место для поиска и изучения, как вы указали. Возможно, видео может помочь. – Sam

+0

Хотя видео поможет много. Это немного сложно смотреть в офисе. – Seb

0

Посмотрите на documentation for UIView. Вы обнаружите, что существует ряд методов, которые позволяют вам получить доступ к содержимому представления. Например, есть свойство subviews, которое предоставляет массив всех представлений вида. Существует также метод -viewWithTag:, который вернет указатель на subview с указанным тегом. (Вы можете установить тег представления на все, что вам нравится в Interface Builder.)

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

0

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

Если вы используете 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 
} 

Внутри Interface Builder вам нужно будет назначить этот выход в какой-то точки зрения в вашем XIb. Обычно вы делаете это, выбирая «Владелец», а затем в Инспекторе подключений нажмите на свое имя свойства и перетащите его в UIView, которому вы хотите назначить его.

1

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

UIView * viewToGet = [theMainView viewWithTag:1] 

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

Смежные вопросы