iPhone - UIActivityIndi​​catorView在停止时不会隐藏

时间:2011-04-24 00:35:31

标签: iphone hide uiactivityindicatorview

我有一个像这样编写的自定义UIWebView:

的.h

@interface MiniWebViewController : UIViewController {
    NSString* destinationURL;

    UIWebView* webView;
    UIActivityIndicatorView* activityIndicatorView;
}

@property (nonatomic, retain) NSString* destinationURL;

@property (nonatomic, retain) IBOutlet UIWebView* webView;
@property (nonatomic, retain) IBOutlet UIActivityIndicatorView* activityIndicatorView;

- (void) run;

@end

的.m

@synthesize destinationURL;
@synthesize webView;
@synthesize activityIndicatorView;

- (id) initWithFrame:(CGRect)frame {
    if (self = [super initWithNibName:@"MiniWebView" bundle:nil]) {
        self.destinationURL = @"";

        self.view.frame = frame;
        self.activityIndicatorView.center = self.webView.center;
    }

    return self;
}

- (void) run {
    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.destinationURL]]];
}

它被称为从另一个ViewController启动:

- (void) aFunction {
    MiniWebViewController* oneViewController = [[MiniWebViewController alloc] initWithFrame:CGRectMake(/*Some Rect*/];
            oneViewController.webView.tag = i;
            oneViewController.destinationURL = /*SomeURL*/;
            oneViewController.webView.delegate = self;

            [self.view addSubview:oneViewController.view]; /* the Web view is inside this one */
            [oneViewController run];
    }

    - (void) webViewDidFinishLoad:(UIWebView *)webView {
        int webViewID = webView.tag;
        MiniWebViewController* webViewController = [self.webViews objectAtIndex:webViewID];
        [webViewController.activityIndicatorView stopAnimating];
    }

    - (void)webViewDidStartLoad:(UIWebView *)webView {
        int webViewID = webView.tag;
        MiniWebViewController* webViewController = [self.webViews objectAtIndex:webViewID];
        [webViewController.activityIndicatorView startAnimating];
    }

进入IB hidesWhenStopped也被检查。一切都是相互联系的。指示器的样式在IB中设置为“大白”。

运行时,指示灯不大,但很小 它已成功启动和停止(触发委托调用),但在停止时不会隐藏。

有什么问题?我没看到......

2 个答案:

答案 0 :(得分:6)

仔细查看代码后,您将在init方法中修改UIActivityView。更改它们以便它们在您的viewDidLoad中。在init,您尚未加载视图,因此,您的控制器中尚未创建这些对象的实例。

这些是需要移动的声明:

self.activityIndicatorView.hidesWhenStopped = YES;

self.view.frame = frame;
self.activityIndicatorView.center = self.webView.center;

这可以追溯到Objective-C的基础:向nil对象发送消息...返回nil。这有时很烦人,因为没有编译时警告,也没有任何运行时异常 - 该语言的功能

答案 1 :(得分:-1)

我很愚蠢,而XCode / cocoa确实无济于事。

我加载了错误的XIB名称,不会存在。 所以我要求加载一些不存在的东西,app stil工作,甚至显示和使用不存在的对象。直到一个电话不能按预期工作。没有崩溃...... 这是无稽之谈。