Дочерние представления iOS, SRP и пользовательские события

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

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

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

// Йохан


person Johan Nordberg    schedule 11.12.2011    source источник


Ответы (1)


Чтобы получить содержимое файла 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];
}

Дайте мне знать, если это ясно.

person Eugene    schedule 11.12.2011