1

我有一个加载了 tableView 的 FirstView,当点击 tableviewCell 的附件按钮时,它会转到 SecondView。SecondView 中的数据是从服务 url 加载的,因此需要时间。所以我需要在点击附件按钮时显示 activityIndi​​cator,停止它加载整个数据后。但我看不到显示活动指示器。

这是我正在处理的代码:

- (void) tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{

 activityIndicator = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(143, 220, 37, 37)];
 activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
 activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
 activityIndicator.color = [UIColor redColor];
 [scrollView  addSubView:activityIndicator];
 [activityIndicator startAnimating];
 activityIndicator.frame=CGRectMake(140, 195, 37, 37);
 [activityIndicator startAnimating];

        SecondView *secView = [[SecondView alloc] initWithNibName:@"SecondView" bundle:nil];
        secView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

        UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
        UILabel *name1 = (UILabel*)[cell viewWithTag:111];
        secView.provName = [name1 text];

        [self presentModalViewController: secView animated:NO];

        [secView release];
    }

我要去哪里错了?

编辑:

第二视图:

-(void)viewWillAppear:(BOOL)animated

{
    activityIndictr = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(143, 220, 37, 37)];
    activityIndictr.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;

    activityIndictr.color = [UIColor redColor];
    [testscroll addSubview:activityIndictr];
    [activityIndictr startAnimating];

}

-(void)viewDidLoad
{
  [super viewDidLoad]
   // I m calling many service urls(10) and assigning to labels and tableview 
  [activityIndictr stopAnimating];

}
4

4 回答 4

1

您应该在 SecondView 中调用活动指示器ViewWillAppear,以便在推入此视图后立即启动活动指示器,然后在从 url 解析所有数据时将其关闭。

这是因为第二个视图控制器几乎会立即被推送,并且数据需要一些时间来加载

于 2013-01-17T12:07:21.510 回答
0

您分配了两个活动指示器,将第一个扔掉,然后开始为第二个设置两次动画,并且永远不要将任何活动指示器添加到任何现有视图中。难怪它没有出现。尝试[[secView view] addSubview:activityIndicator]或类似的东西。

于 2013-01-17T12:07:04.413 回答
0

在 SecondView 的 viewWillAppear 中执行此操作:

activityIndicator = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(143, 220, 37, 37)];
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
[self.view addSubview:activityIndicator];
[activityIndicator startAnimating];
于 2013-01-17T12:08:49.573 回答
0

我再次更新了答案。

将此代码放入 appdelegate 并在 appdelegate 中定义静态对象,如下所示

静态 UIActivityIndi​​catorView *activityView;

+(void)showActivityIndicator{

if (!activityView) {
    activityView = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    activityView.center = CGPointMake(160, 230);
    [activityView startAnimating];
    UIWindow *win = [UIApplication sharedApplication].keyWindow;
    [win addSubview:activityView];
}
}


+(void)removeActivityIndicator{
if ([activityView superview]) {
    [activityView removeFromSuperview];
    activityView = nil;
}
}






- (void) tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
UIWindow *window = [UIApplication sharedApplication].keyWindow;

//global static activity indicator... you can access from any other view controlller

 [AppDelegate showActivityIndicator];

}

得到回应后

   [AppDelegate removeActivityIndicator];
于 2013-01-17T12:15:07.103 回答