Какая лучшая реализация для указания кода для всех селекторов viewXXX?

#objective-c #xcode #uikit

#objective-c #xcode #uikit

Вопрос:

прежде всего: мой вопрос очень теоретический. Даже если я опубликую пример, я просто хочу знать, какая реализация является лучшей для решения такого рода проблем. Может быть, вы будете смеяться, когда прочитаете этот вопрос, потому что он очень фундаментален, но я хочу понять, как справиться с такой ситуацией.

Представьте следующее: у вас есть приложение, которое взаимодействует с внешним API через XML. Как факт, представление не может появиться немедленно, потому что API требуется время для реакции. Моя идея заключалась в реализации подвида, который содержит анимацию загрузки. Когда API отправляет ответ, это вложенное представление удаляется, и появляется основное представление. Вот мой пример:

 - (void)viewWillAppear:(BOOL)animated {

    UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; 
    [myView setBackgroundColor:[UIColor whiteColor]]; 
    myView.tag = 1;

    UIActivityIndicatorView  *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    loadingView.frame = CGRectMake(145, 160, 25, 25);

    [myView addSubview:loadingView];
    [self.view addSubview:myView]; 
    [loadingView startAnimating];

}

- (void)viewDidAppear:(BOOL)animated
{

    [self loadXMLData]; 
    [self.tableView reloadData]; 
    [[self.view viewWithTag:1] removeFromSuperview]; 
}
  

Все работает нормально. Моя проблема заключается в следующем: я должен делать это не только в этом представлении. Мои приложения состоят из множества представлений, так каков наилучший способ избежать повторения этого кода? Я подумал о следующем: я модифицирую (UIKit UIViewController) селектор viewDidAppear и помещаю в него код. Я не знаю, разрешает ли Apple изменять свои фреймворки. Кроме того, для меня это выглядит очень грязно; о) Кто-нибудь может рассказать мне, как это обычно делается? Спасибо!

(надеюсь, вы меня понимаете, мой родной язык не английский 🙁 )

Ответ №1:

Почему бы просто не создать подкласс UIViewController , в котором этот код реализован в viewWillAppear и viewDidAppear , а затем наследовать все остальные контроллеры представления в приложении из этого «базового» подкласса, а не UIViewController? Это будет намного проще, чем пытаться что-либо сделать с UIViewController напрямую.

Комментарии:

1. Это просто — мне стыдно; о) Спасибо! 🙂