如何通过活动指示器查看子视图?

时间:2011-04-26 15:04:41

标签: iphone objective-c cocoa-touch xcode

我需要查看带有活动指示符的子视图。 这是我的代码,但子视图没有出现:

@interface ProgressViewController : UIViewController {
    IBOutlet UIActivityIndicatorView *myActivityIndicator;
}
@property (nonatomic, retain) IBOutlet UIActivityIndicatorView *myActivityIndicator;
@end

@implementation ProgressViewController
@synthesize myActivityIndicator;

- (void)viewDidLoad {
   [myActivityIndicator startAnimating];
   [super viewDidLoad]; 
}
- (void)viewWillDisappear:(BOOL)animated {
   [myActivityIndicator stopAnimating];
}
@end


#import "ProgressViewController.h"

@interface MyViewController : UIViewController {
    ProgressViewController *progressViewController;
}

@property (nonatomic, retain) ProgressViewController *progressViewController;
@end

@implementation MyViewController

@synthesize progressViewController

- (void)viewDidLoad
{
    progressViewController = [[ProgressViewController alloc] initWithNibName:@"ProgressViewController" bundle:nil];
    [self.view addSubview:progressViewController.view];
    sleep(4);
    [progressViewController.view removeFromSuperview];

    [super viewDidLoad];
}
@end

3 个答案:

答案 0 :(得分:2)

可能有多种原因,而且您发送的代码仍然有点不清楚,它是哪一个。

首先,你不应该在代码中使用sleep(4) - 它会混淆iOS运行的应用程序引擎以支持用户输入,屏幕刷新等。 您的代码可以轻松更改为:

[self performSelector:@selector(removeMyProgressView:) withObject:progressViewController.view afterDelay:4.0];

并在 removeMyProgressView:函数中 removeFromSuperview

此外,这行代码还有错误:

progressViewController = [[ProgressViewController alloc] initWithNibName:@"ProgressViewController" bundle:nil];

应该是

self.progressViewController = [[ProgressViewController alloc] initWithNibName:@"ProgressViewController" bundle:nil];

否则,您不会调用setter函数(@sythesized属性),并且不会保留该对象。可能是它被释放了,因此你没有看到它。

如果这一切都没有,我们会继续抨击它:)

祝你好运!

乌迪德。

答案 1 :(得分:1)

-viewDidLoad方法中的所有内容都在一个runloop中发生。这意味着您可以添加和删除活动指示器,而无需让系统实际绘制它。 4秒的睡眠没有帮助。那些只是让runloop需要更长时间才能完成。

答案 2 :(得分:0)

[super viewDidLoad]方法

中的任何内容之前调用- (void)viewDidLoad