Подтвердить что ты не робот

Как создать многоразовые элементы управления iOS?

Как новый разработчик iOS, я пытаюсь определить лучший подход к созданию элементов управления многократным использованием в iOS4+. Например, если я хотел создать настроенный UIImageView, который можно было бы использовать в нескольких других представлениях, то какой лучший подход.

Я создал элемент управления, включая следующие файлы:

  • MyImageViewController.h
  • MyImageViewController.m
  • MyImageViewController.nib

Предположим, что мне нужен элемент управления, который использует файл .nib.

Как бы я сделал следующее:

  • Создайте экземпляр настраиваемого элемента управления в другом представлении, программно и через IB?
  • Как структурировать пользовательский элемент управления, чтобы он мог выставлять "события", например, ontouch?
  • Как я могу структурировать настраиваемый элемент управления, чтобы я мог вызывать действия/методы, например, loadImage()?

Любые идеи или рекомендации оценены. Благодаря

4b9b3361

Ответ 1

Вы , вероятно, не будете использовать nib/xib для создания "управления" повторного использования. iOS очень отличается от того, с чем вы можете использовать, скажем, Java или .NET. Для некоторых видов представлений вы создадите xib и контроллер/класс, который его поддерживает - UITableViewCell является примером этого.

Я хотел бы дать вам пошаговое руководство, как добиться того, что вы пытаетесь сделать, но я не могу, потому что у меня недостаточно информации о том, что вы на самом деле пытаетесь сделать. На сайте разработчика Apple есть несколько отличных руководств, чтобы познакомить вас с взаимодействием событий View/Controller/Touch, но сайт не отвечает прямо сейчас (я предполагаю, что из-за выпуска видео WWDC). Говоря, просмотр видео с WWDC 2010 был бы еще одним отличным способом узнать некоторые из того, что вы пытаетесь достичь, особенно сессии UIKit.

Вы не собираетесь создавать "элементы управления", как вы, вероятно, привыкли к ним, а пользовательские объекты UIView-потомки и пользовательские объекты UIViewController-потомки. В моих проектах я нашел очень мало сценариев, где создание многоразового UIView имело какую-либо пользу (кроме UITableViewCells). Подавляющее большинство многоразового кода в проекте iOS - ViewControllers. Вы будете раскрывать события с помощью делегирования - ваш контроллер определит делегата, который будет реализован другим объектом, и получите вызовы метода от вашего контроллера для обработки того, что было делегировано. Опять же, руководства Apple и видеоролики WWDC очень хорошо объясняют это.

Здесь приведен пример многоразового контроллера и его использования:

MyEntityViewController.m

- (id)initWithEntity:(EntityFoo *)theEntity inEditMode:(BOOL)inEditMode {
  self = [super initWithNibNamed:@"EntityFooView" bundle:nil];
  if(self) {
    //retain entity somewhere
    //dont setup view in here!
  }
  return self;
}

- (void)viewDidLoad {
  //setup view in here. This ensures compatibility with standalone operation
}

RootViewController.m

- (void)viewDidLoad {
  [super viewDidLoad];

  EntityViewController *evc = [[EntityViewController alloc] initWithEntity:self.someEntity inEditMode:NO];
  [self.view addSubview:evc.view];

  //You MUST call this method, the framework will not call it on sub-controllers
  [evc viewDidLoad];

  self.entityViewController = evc;
  [evc release];
}

Это не полная реализация, так как ваш опыт и инфраструктура растут, вы найдете шаблон уведомления (подсказки подсказки) под-просмотр контроллеров событий в главном контроллере представления. Я настоятельно рекомендую вам посмотреть видео WWDC 2011, если у вас есть к ним доступ, поскольку в следующей ОС есть что-то, что связано с этим предметом.

Ответ 2

Здесь статья, в которой описывается, как создать многоразовый элемент управления с помощью наконечника. Раздел под названием "Повторное использование subview" звучит так, как вы хотите.

В отличие от того, что сказал @RyanR, совершенно отлично создавать многоразовый элемент управления в iOS. Это не образец, который я видел много, но вы можете это сделать полностью.

Ответ 3

Это моя версия для раскадровки.

Добавить идентификатор контроллера представления:

введите описание изображения здесь

в .h файле создайте свойство для хранения контроллера. В противном случае он будет удален из памяти:

@property (nonatomic, strong) TestViewController *timetableViewController;

в .m файле:

-(void)viewDidLoad{
    [super viewDidLoad];
    TestViewController *centerViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"VIEW_CONTROLLER_ID"];
    [self.view addSubview:centerViewController.view];
    [centerViewController viewDidLoad];
    self.timetableViewController = centerViewController;

}