iOS Child Views, SRP и пользовательские события - PullRequest
0 голосов
/ 11 декабря 2011

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

Я построил оба дочерних представления в Интерфейсном Разработчике как XIB: s.Но я не уверен, как использовать их на главном контроллере вида.Могу ли я использовать IB, чтобы добавить свои собственные виды на поверхность дизайна?Или мне нужно добавить это программно?

Каков наилучший способ отправки сообщений или пользовательских событий между этими двумя дочерними представлениями?Я бы хотел, чтобы они были максимально отделены друг от друга.В основном я хотел бы отправить событие, когда пользователь входит или выключается, чтобы пользовательский интерфейс мог реагировать на эти изменения.Я также хотел бы, чтобы табличное представление с сообщениями знало, когда новые сообщения публикуются из представления записи.

// Johan

1 Ответ

1 голос
/ 11 декабря 2011

Чтобы получить содержимое xib-файла, вы должны сначала загрузить его, отправив loadNibNamed:owner:options: сообщение классу NSBundle.

Предположим, у вас есть подкласс UIView с именем CustomView и файл CustomView.xib.В xib-файле у каждого представления есть тег.Ваш файл .h будет выглядеть так:

@interface CustomView : UIView

@property (nonatomic, assign) UILabel *someTextLabel; //use assign in order to not to override dealloc method

@end

.m
@implementation CustomView

- (id)init {
  self = [super init];
  if (self) {
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:nil options:nil];
    [self addSubview:[topLevelObjects objectAtIndex:0]]; //this object is a CustomView.xib view
    self.someTextLabel = (UILabel *)[self viewWithTag:5]; //consider you have a UILabel on CustomView.xib that has its tag set to 5
  }
  return self;
}

@end

Это как использовать .xibs для ваших пользовательских подклассов UIView.Если ваше приложение похоже на чат, вам придется добавлять их программно.

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

в одном

@property (nonatomic, assign) CustomView *customView;

в другом

@property (nonatomic, assign) AnotherCustomView *anotherCustomView;

и просто отправлять им сообщения, когда что-то даже происходит

- (void)buttonPressed {
  [customView handleButtonPressedEvent];
}

Пустья знаю, если это ясно.

...