iOS5 добавление и управление классом UIView - PullRequest
0 голосов
/ 01 февраля 2012

Я создал класс UIVeiw и .xib. В этом представлении .xib у меня есть его набор для произвольной формы с размерами 400x200, и я назначил его своему пользовательскому классу с тем же именем:

Раскадровка: blogView Файлы классов: blogView.h & blogView.m

В .xib я добавил метку и текстовое поле и связал их с переменной в файлах .h и т. Д. (См. Код ниже).

blogCont.h

  #import <UIKit/UIKit.h>

  @interface blogCont : UIView
  @property (strong, nonatomic) IBOutlet UILabel *lbBlogDate;
  @property (strong, nonatomic) IBOutlet UITextView *txtBlogTitle;

  @end

blogCont.m

  #import "newsStoryView.h"

  @implementation blogCont
  @synthesize lbBlogDate;
  @synthesize txtBlogTitle;

  - (id)initWithFrame:(CGRect)frame
  {
      self = [super initWithFrame:frame];
      if (self) {
          // Initialization code place a log to see if it loads
          NSLog(@"View Loaded");


      }
      return self;
  }
  @end

Теперь в моем главном файле viewController.m я добавил следующий код для инициализации этого класса представления и добавил цвет фона, чтобы посмотреть, загружается ли он.

viewController.m

 UIView *blogCont = [[blogView alloc] init];
 blogCont.backgroundColor = [UIColor purpleColor];
 [subview addSubview:blogCont];

Теперь, когда я запускаю это, все работает хорошо, но поскольку я не вижу фиолетовый фон, он выглядит так, как будто представление не загружается, но в журнале я вижу сообщение NSLog, которое у меня есть в этом представлении NSLog (@ " Просмотр загружен "); так что, кажется, это инициирует это, но я не могу на всю жизнь заставить это отобразить?

Теперь, если я немного изменю код для моего основного поля View Controller.m на:

 CGRect blogFrame;
 blogFrame.origin.x = 20;
 blogFrame.origin.y = 20;
 blogFrame.size = CGRectMake(400,200);;


 newsStoryView *blogCont = [[blogView alloc] blogFrame];
 blogCont.backgroundColor = [UIColor purpleColor];
 [subview addSubview:blogCont];

Затем я получаю мое представление, отображающее красивую фиолетовую рамку, так что это появляется, когда я устанавливаю размер кадра и инициализирую представление с ним 'blogFrame', но я думал, что все это будет установлено в настройках .xib, так нет необходимости делать это?

ТАК, как я могу создать этот класс внешнего представления и назначить его в другое представление, а затем манипулировать его данными, поскольку доступ к метке в .xib с помощью blogCont.lbBlogDate.text, кажется, не работает, вероятно, это так, но как Я не могу просмотреть это, я не могу подтвердить это.

Что я делаю не так?

Спасибо

1 Ответ

0 голосов
/ 02 февраля 2012

Кажется, я почти ответил на свой вопрос, а затем сделал:

Я не устанавливал размер в своем отдельном представлении класса. Я запрашивал размер при инициализации:

  - (id)initWithFrame:(CGRect)frame

thisзапрашивает размер

, чтобы я мог сделать следующее с указанным выше:

  - (id)init
{
    self = [super initWithFrame:CGRectMake(0, 0, 478, 220)];
  .... rest of code

Установка размера в представлении загрузки.

Но я также мог бы установить егокогда я запускаю его в моем главном контроллере вида, как показано ниже:

 newsStoryView *blogCont = [[blogView alloc]  initWithFrame:CGRectMake(0, 0, 400, 200)];

Это лучше, так как я могу контролировать положение каждого из них.Надеюсь, это кому-нибудь поможет

...