Доступ к свойствам из подкласса UIView

У меня довольно загроможденный дисплей, где мне нужно текстовое поле, 9 UIlabels и 9 UIButtons с линиями, соединяющими их в форме перевернутого дерева. Все создается на коде.

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

В раскадровке я изменил класс self.view на новый созданный мной подкласс. Когда я запускаю симулятор, он правильно отображает то, что я хотел.

Проблема возникает, когда я пытаюсь получить доступ к общедоступным свойствам созданного мной подкласса, например, когда я пытаюсь изменить текст метки. Когда я печатаю в viewController, Xcode не показывает все свойства, которые я установил ранее.

Теперь я не знаю, то ли мой подход неверен, то ли я что-то упускаю. Было бы лучше создать подкласс UIViewController и работать оттуда?

Любая помощь будет оценена по достоинству.


person Marcal    schedule 21.04.2014    source источник


Ответы (2)


Переопределите свойство view в вашем расширении интерфейса:

#import "CustomView.h"

@interface ViewController ()

@property (nonatomic, strong) CustomView *view;

@end

@implementation ViewController

// Only needed if you're not using storyboards
-(void)loadView
{
    self.view = [CustomView new];

    // Setup the rest of your view, e.g.
    self.view.customLabel.text = @"Custom label text";
}

@end

РЕДАКТИРОВАТЬ: я только что заметил, что вы используете раскадровки, поэтому loadView не нужен, но я оставил это для полноты для других.

person Rich    schedule 21.04.2014
comment
Круто, я знал, что что-то упускаю. Есть ли простой способ переопределить действия кнопок? Теперь я устанавливаю цель каждой отдельной кнопки на viewDidLoad. Интересно, есть ли способ проще... - person Marcal; 21.04.2014
comment
@Marcal Да, в раскадровке перетащите внутреннюю розетку Touch up в файл контроллера представления. - person Rich; 21.04.2014
comment
@Marcal взгляните на это, надеюсь, это поможет объясните это - это для перьев, а не для раскадровки, но это та же идея :) - person Rich; 21.04.2014
comment
Да, спасибо. Я все это знаю, но я делаю все subViews self.view по коду, поэтому я не могу ничего перетаскивать на раскадровку. Теперь все готово. Спасибо, в любом случае! - person Marcal; 21.04.2014

Вы должны передать это на свой взгляд. Вот так

MyViewClass *MyView=(MyViewClass*)self.view;


if ([self.view isKindOfClass:[MyViewClass class]]) {

    //do something like MyView.urProperty 

    // Don't forget to import the MyViewClass.h in the class        

}
person Vijay-Apple-Dev.blogspot.com    schedule 21.04.2014