2011-07-21 7 views
0

私はTableViewController上にUIActivityIndi​​catorViewを持っています。 initでアニメーションを開始すると、アクティビティインジケータが表示されますが、startコマンドを他の場所に移動すると、動作しない/表示されません。誰かが私が間違っていることを考えているのですか?私はここでそれを見つけることができません。私はデータをロードしている間にそれを表示したい。データのロード中にUIActivityIndi​​catorViewを表示できない

TableViewController.h

#import <UIKit/UIKit.h> 


@interface CategoryTableViewController : UITableViewController { 
    NSArray *cats; 
    UIActivityIndicatorView *activityIndicator; 
} 

@end 

TableViewController.m

#import "CategoryTableViewController.h" 
#import "NieuwsDataManager.h" 
#import "CategoryTableCell.h" 
#import "NiewsCategory.h" 
#import "NieuwsTableViewController.h" 


@implementation CategoryTableViewController 

- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 
    if (self) { 
     cats = [[NSArray alloc ] initWithArray:[NieuwsDataManager sharedInstance].newsCategories]; 
     self.title = @"Nieuws" ; 
     activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame: CGRectMake(100,150,120,120)]; 
     activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; 


     [self.view addSubview:activityIndicator]; 


    } 
    return self; 
} 

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

    [activityIndicator startAnimating]; 



    NiewsCategory *cat = [[NieuwsDataManager sharedInstance].newsData objectForKey:[cats objectAtIndex:indexPath.row]]; 



    [[NieuwsDataManager sharedInstance] getNewsByCategory:cat]; 



    NieuwsTableViewController *nt = [[NieuwsTableViewController alloc] initWithCategory:cat]; 

    [activityIndicator stopAnimating]; 

    [self.navigationController pushViewController:nt animated:YES]; 

    [nt release]; 

    [self.tableView deselectRowAtIndexPath:indexPath animated:NO]; 
} 

答えて

0

UIスレッドがハングアップしている間にUIActivityIndi​​catorsが描画することは以前から気付いていましたが、UIスレッドが進行状況インジケータをアニメーション化するためには、バックグラウンドスレッドでタスクを実行する必要があります。 Apple's documentation about Concurrency Programmingを参照してください。一般に、UIスレッドがユーザに応答し続けることができるように、バックグラウンドスレッドで長時間の操作を実行することは良いことです。

1

私はこれだろう。

- (id)initWithStyle:(UITableViewStyle)style { 
    //your code 
    [self.view addSubview:activityIndicator]; 
    [activityIndicator startAnimating]; 
} 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidLoad]; 
    [activityIndicator stopAnimating]; 
} 

を、私はこのことについてのチュートリアルを発見し、それが本当に良い方法を示していこれを行うには: http://www.markbetz.net/2010/09/30/ios-diary-showing-an-activity-spinner-over-a-uitableview/

2
[self.view addSubview:activityIndicator]; 

このコードから、tableViewself.viewとして設定されていない可能性があります。 viewに追加していますので、[activityIndicator startAnimating];のメソッドが実際に動作している可能性がありますが、「サブビューを前面に持ってきてください」と設定する必要があります。テーブルビューの下にアニメーションが表示されている可能性があります。

+0

これは問題ではないようです。通常は、init関数からstartAnimatingを呼び出す瞬間です。 – ophychius

0

は既にinitメソッドで使用できますか?このような操作はviewDidLoadメソッドで実行してはいけませんか?

関連する問題