Я новичок в Objective-C, поэтому то, что я делаю по этому поводу, может быть смешным, но здесь говорится:
У меня есть форма для входа в приложение для iPhone.Когда пользователь вводит свои учетные данные, он нажимает Готово в верхнем правом углу, что вызывает IBAction, и появляется всплывающий пользовательский индикатор прогресса.Я создал этот индикатор с помощью класса, содержащего метод экземпляра с именем showProgressIndicator . showProgressIndicator создает и возвращает UIView, который я затем добавляю в свое представление следующим образом:
ProgressIndicatorElement *ProgressIndicator = [[ProgressIndicatorElement alloc] init];
box = [ProgressIndicator showProgressIndicator];
[self.view addSubview:box];
Я, конечно, объявил в качестве UIView поле в моем заголовочном файле.Индикатор прогресса прекрасно появляется, и тем временем я делаю закулисный URL-запрос, который, когда закончил, вызывает другой метод в моем контроллере представления с именем receiveServerResponse .Теперь я хочу удалить индикатор прогресса, поэтому я делаю это:
- (void)receivedServerResponse {
[box removeFromSuperview];
}
Но ничего не происходит вообще.Я не получаю никаких ошибок или предупреждений, и код подсвечивается, как будто все работает гладко.Я пытался сохранить индикатор в своем IBAction, но это тоже не помогло.
Надеюсь, вы поможете!
Обновлено:
Вот метод showProgressIndicator :
- (UIView *)showProgressIndicator {
box = [[UIView alloc] initWithFrame:CGRectMake(85, 190, 210, 140)];
box.backgroundColor = [UIColor colorWithRed:0.0 / 255 green:0.0 / 255 blue:0.0 / 255 alpha:.6];
box.layer.cornerRadius = 8;
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
spinner.layer.frame = CGRectMake((box.layer.bounds.size.width - spinner.layer.bounds.size.width)/2, 20, spinner.layer.bounds.size.width, spinner.layer.bounds.size.height);
[spinner startAnimating];
[box addSubview:spinner];
UILabel *titleInBox = [[UILabel alloc] initWithFrame:CGRectMake(0, 65, 150, 20)];
titleInBox.font = [UIFont boldSystemFontOfSize:16];
titleInBox.textColor = [UIColor whiteColor];
titleInBox.textAlignment = UITextAlignmentCenter;
titleInBox.backgroundColor = [UIColor clearColor];
titleInBox.text = @"Authorizing...";
[box addSubview:titleInBox];
return box;
}
Второе обновление:
@ Дипак только что указал в комментариях, что я мог работатьдва разных экземпляра моего контроллера представления, который на самом деле, кажется, имеет место.Во внешнем классе, который обрабатывает вышеупомянутый URL-запрос, я возвращаюсь к методу receiveServerResponse контроллера представления, выполняя это:
- (void)requestFinished:(ASIHTTPRequest *)request {
NSString *responseString = [request responseString];
SignInViewController *viewController = [[SignInViewController alloc] init];
[viewController receivedServerResponse];
}
Не распространяя себя слишком тонко (вероятно, слишком поздно;)), ASIHTTPRequest настроен так, что если вы вызываете один метод, который выполняет асинхронный URL-запрос, вызывается предопределенный метод с именем requestFinished (выше), поэтому мне пришлось вызывать мой контроллер представления следующим образомкстати, потому что я не могу получить доступ к возвращенному значению более простым способом (о котором я знаю).