#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. Это просто — мне стыдно; о) Спасибо! 🙂