Iphone UIActivityIndicator未设置动画

Iphone UIActivityIndicator未设置动画,iphone,xcode,uiactivityindicatorview,Iphone,Xcode,Uiactivityindicatorview,我在iphone应用程序中使用活动指示器,但问题是当我写这行时 [indicator startAnimating]; 在viewDidLoad中,它会设置动画,但当我在移动到下一个屏幕的按钮代码中写入同一行时,它不会设置动画 -(IBAction)nextButtonClicked{ if ([professionLabel.text isEqualToString:@"Profession"]) { errorLabel.text=@"Please Select the High

我在iphone应用程序中使用活动指示器,但问题是当我写这行时

 [indicator startAnimating];
在viewDidLoad中,它会设置动画,但当我在移动到下一个屏幕的按钮代码中写入同一行时,它不会设置动画

-(IBAction)nextButtonClicked{
if ([professionLabel.text isEqualToString:@"Profession"]) {
    errorLabel.text=@"Please Select the Highliteg Answers";
    Q1.textColor=[UIColor redColor];
}


if ([workLabel.text isEqualToString:@"Work"]) {        
    errorLabel.text=@"Please Select the Highlight Answers";
    Q2.textColor=[UIColor redColor];
} 



 if([yearLabel.text isEqualToString:@"Year"]){ 
    errorLabel.text=@"Please Select the Highliteg Answers";
    Q3.textColor=[UIColor redColor];
} 




else{
    errorLabel.text=@"";
    Q1.textColor=[UIColor ];
    Q2.textColor=[UIColor];
    Q3.textColor=[UIColor];


   [indicator startAnimating];
    [self submitSurveyAnswers];

    [self submitSurveyAnswersOne];
    [self submitSurveyAnswersTwo];

      OnlineViewController*targetController=[[OnlineViewController alloc]init];
targetController.mynumber=mynumber;
[self.navigationController pushViewController:targetController animated:YES];
}
}

编辑:从

如何使用下面给出的:显示线下的指示器使用

    [NSThread detachNewThreadSelector:@selector(startActivity:) toTarget:self 
withObject:nil]

-(void)startActivity:(id)sender // add this method
{ 
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  [[SHKActivityIndicator currentIndicator] displayActivity:@"Cropping Image"];
  [pool release];
}
按如下方式隐藏您想要的任何位置:

[[SHKActivityIndicator currentIndicator] hide];

通过替换[indicator startAnimating]在按钮事件中添加这行代码

[NSThread detachNewThreadSelector:@selector(startActivity:) toTarget:self withObject:nil];
添加以下将被调用的方法:

-(void)startActivity:(id)sender
{
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
   [indicator startAnimating];
   [pool release];
}

如果将此行添加到按钮的
-(iAction)
,则不会显示活动指示器动画,因为按钮操作是即时的,下一个视图几乎会立即显示。因此,要么以编程方式构建
ui按钮
,要么使用
-(void)
函数作为
ui按钮
的选择器。在这种情况下,
[指示器开始激活]
将被调用,然后是button方法的其余部分


否则,您可以简单地延迟
-(iAction)
中的操作。我猜这些方法是基于
NSURLConnection
的。数据发送部分可能是
同步的
,它会暂停主
UIThread
,这就是为什么activityIndicator不会设置动画

更好的方法是将数据发布部分移动到另一个线程。替换以下内容:

[indicator startAnimating];
[self submitSurveyAnswers];

[self submitSurveyAnswersOne];
[self submitSurveyAnswersTwo];

OnlineViewController*targetController=[[OnlineViewController alloc]init];
targetController.mynumber=mynumber;
[self.navigationController pushViewController:targetController animated:YES];
与:

并创建两种方法:

-(void)startPosting{
  [self submitSurveyAnswers];
  [self submitSurveyAnswersOne];
  [self submitSurveyAnswersTwo];
}
&

然后在成功提交数据后,在主线程上调用方法
dataSubmissionComplete
,如下所示:

[self performSelectorOnMainThread:@selector(dataSubmissionComplete) withObject:nil waitUntilDone:YES];
在这样的情况下,当数据在后台的另一个线程上获取/发布时,UI线程会为活动指示器设置动画,通常会遵循此过程


编辑-如果您想要自定义活动指示器,请查看并打开带有教程的源代码活动指示器文件。

但是当您提交它时,您正在推送一个新视图,并且您的UIActivityIndicator视图在您的上一个视图中,而现在您的当前视图在屏幕上。请明确这实际上是从非主线程调用UIKit,这通常是个坏主意。这是wokring,但如果我希望此活动指示器与UIAlertView之类的windows中的活动指示器相同,那么是否可以像appYes中那样添加此指示器,您应该延迟要执行的操作,使用
性能选择器:withObject:afterDelay:
或任何其他方式。问题是,您立即开始提交答案,而您没有给UIKit时间开始设置指示器动画。
-(void)startPosting{
  [self submitSurveyAnswers];
  [self submitSurveyAnswersOne];
  [self submitSurveyAnswersTwo];
}
-(void)dataSubmissionComplete{
  OnlineViewController*targetController=[[OnlineViewController alloc]init];
  targetController.mynumber=mynumber;
  [self.navigationController pushViewController:targetController animated:YES];
}
[self performSelectorOnMainThread:@selector(dataSubmissionComplete) withObject:nil waitUntilDone:YES];