2015-01-24 1 views
-1

У меня есть табличное представление, которое заполняет данные с сервера, я использую UIActivityIndicatorView, чтобы показать значок обработки, но если пользователь нажмет кнопку возврата, этот индикатор все еще оживляет. Как мы можем выполнить stopAnimating на этом UIActivityIndicatorView? Любая помощь будет оценена по достоинству.UIActivityIndicatorView анимация остановки

Вот пример кода, который я использую для создания ActivityIndicatorView.

self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
    self.spinner.center = self.tableView.center; 
    self.spinner.color = [UIColor yellowColor]; 
    UIWindow *mainWindow = [[UIApplication sharedApplication] keyWindow]; 
    [mainWindow addSubview: self.spinner]; 
+1

Вы упомянули, что «пользовательская кнопка возврата», вы используете 'UINavigationCcontroller'? –

+0

@YuchenZhong: Да, правильно. Нажмите кнопку UINavigationController back. – kosa

+1

Есть ли причина, по которой вы добавляете UIActivityIndicatorView в 'keyWindow'? Вы хотите, чтобы он работал с разными взглядами или чем-то еще? –

ответ

1

Ваша инициализация блесны в порядке, как:

self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
self.spinner.center = self.view.center; 

А затем, чтобы увидеть spinner, вам нужно добавить его как подвид некоторого вида. Поэтому мы обычно будем делать следующее.

[self.view addSubview:self.spinner]; 

Однако, так как вы используете tableview здесь, это не очень хорошая идея, чтобы сделать это. Becaue tableview - это вид прокрутки, и прядильщик будет прокручиваться с табличным представлением, которое супер привязывается к пользователю.

Таким образом, лучше добавить self.spiner в качестве подзона view из navgationcontroller.

[self.navigationController.view addSubview:self.spinner]; 

При нажатии на кнопку назад, вертушка будет уходить с табличным и вам не нужно беспокоиться об остановке анимации.

Edit:

Кстати, если вы хотите, чтобы остановить анимацию, прежде чем ваш взгляд уйти, к примеру, если вы уже закончить общение с сервером и завершить загрузку данных, вы всегда можете сделать это по телефону [self.spinner stopAnimation].

+0

Спасибо! Я вижу, что это должно быть subview, а не добавлять в окно. Позвольте мне попробовать, я где-то видел, что viewDisappear можно использовать, если я продолжу с кодом, который у меня есть, каково ваше мнение об этом? – kosa

+0

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

+0

Да, вы можете это сделать. Добавить '[self.spinner stopAnimating]' в 'viewDidDisappear' будет работать. Однако по умолчанию для 'hidesWhenStopped' установлено значение' YES'. Когда вы вызываете 'self.spinner stopAnimating', прядильщик скрывается, а не освобождается из памяти. И поскольку он создан в вашем классе TableView, никто другой даже не узнает, что этот spinner когда-либо существует в вашей иерархии представлений. Поэтому, если вы действительно не хотите менять свой код, сделайте следующее: '[self.spinner stopAnimating]; [self.spinner removeFromSuperview] '. –

 Смежные вопросы

  • Нет связанных вопросов^_^