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 から解析されたときに終了します。

これは、2 番目のビュー コントローラーがすぐにプッシュされ、データの読み込みに時間がかかるためです。

于 2013-01-17T12:07:21.510 に答える
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

2 つのアクティビティ インジケーターを割り当て、最初の 1 つを破棄し、2 番目のアニメーションを 2開始し、既存のビューにアクティビティ インジケーターを追加しません。表示されないのも不思議ではありません。試してみてください[[secView view] addSubview:activityIndicator]

于 2013-01-17T12:07:04.413 に答える
0

繰り返しますが、回答を更新しました。

このコードを appdelegate に入れ、以下のように appdelegate で静的オブジェクトを定義します

static 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 に答える