Настройка / создание IB-представления с пользовательским классом - PullRequest
0 голосов
/ 24 января 2012

У меня есть файл .xib для моего viewController. Он содержит TableView и UIView. UIView поддерживается пользовательским классом - CommentsBarView (пытается расположить небольшую панель с полем комментариев под моим tableView).

Итак, в моем списке набросков документов есть:

  1. вид
    • Tableview
    • просмотр панели комментариев
      • UITextView
      • UILabel

Пользовательским классом для «представления панели комментариев» является CommentsBarView.

У меня есть розетки, подключенные из CommentsBarView к текстовому полю и метке. (и из ViewController в tableView).

Когда я загружаю свой контроллер:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

Я могу получить доступ к свойству tableView и изменить внешний вид tableVIew, однако из моего commentsBarView initWithCoder я не могу установить текстовое значение для моего textView и метки:

- (id) initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {

        [self.commentTextView setText:@"Helo, World!"];  
        [self.characterCountLabel setText:@"200"];
    }

    return self;    
}

Кажется, что эти свойства недоступны во время initWithCoder.

Если я вручную, из моих контроллеров initWithNibName, получаю доступ к self.commentsBar.label.text = 200, проблем нет.

Возникает ли проблема с синхронизацией, когда представления еще не готовы или я не могу вкладывать представление в представление viewControllers и поддерживает ли его пользовательский подкласс UIView?

И.Б. меня немного смущает.

Спасибо за любую помощь.

Ответы [ 2 ]

2 голосов
/ 07 февраля 2012

При загрузке из файла XIB IBOutlets не готовы в методах init разархивированных объектов.

Вам необходимо переопределить awakeFromNib в вашем CommentsBarView, чтобы иметь доступ к готовым и подключенным IBOutlets.

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

Как только вы привыкнете к IB, вам станет лучше.Поскольку Cocoa является MVC (Model-View-Controller), вам, вероятно, не следует создавать подкласс UIView и устанавливать для него свой UIView.Вы, вероятно, должны вернуть UIView обратно в UIView.Я обычно делю UIView на подклассы, если мне нужно иметь индивидуальный вид.Например;хорошее время для создания подкласса UIView, если вы хотите, чтобы он имел градиент.Затем вы можете повторно использовать свой подкласс для любого UIView, который вы хотите показать градиент.

В вашем случае вы пытаетесь «контролировать» UITextView и UILabel.Вместо этого вы можете подключить розетки вашего UITextView и UILabel непосредственно к вашему UIViewController (Владельцу файла).Это «контроллер» MVC в данном случае.Думайте о вашем UIView как о контейнере, который просто содержит два элемента управления для этого примера.Теперь вы можете использовать метод viewDidLoad или другой метод UIViewController, чтобы установить значения UITextView и UILabel.Обычно это UIVeiwController, который интерпретирует данные из модели в какао и размещает данные там, где они должны быть.Это не твердое правило, но хорошее.

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