iPhone:添加“加载”子视图

时间:2010-08-16 02:00:35

标签: iphone uiview subview

我希望在我的应用中发生某些事情时显示一个简单的加载对话框。我想我会创建一个新视图,为其添加一个标签,然后将该视图设置为我当前视图的子视图。

这样做时,我什么也看不见!

以下是我编写方法的方法:

- (void)showLoading {
    UIView *loading = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
    loading.backgroundColor = [UIColor blackColor];
    UILabel *txt = [[UILabel alloc] initWithFrame:CGRectMake(198, 9, 94, 27)];
    txt.text = @"Loading...";
    txt.textColor = [UIColor whiteColor];
    [loading addSubview:txt];
    [super.view addSubview:loading];
    [super.view bringSubviewToFront:loading];
    [loading release];
    [txt release];
}

我这样做完全错了吗?

编辑: 我将它添加到viewDidLoad方法,它按我想要的方式工作:

loading = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
    loading.backgroundColor = [UIColor blackColor];
    UILabel *txt = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 94, 27)];
    txt.text = @"Loading...";
    txt.textColor = [UIColor whiteColor];
    [loading addSubview:txt];
    [txt release];
    [self.view addSubview:loading];
    [self.view bringSubviewToFront:loading];

但是当从一个方法加载它时,它似乎滞后,并且没有显示出来。

2 个答案:

答案 0 :(得分:2)

虽然这并没有直接回答你的问题,但我建议从GitHub抓取MBProgressHUD并用它来代替静态标签。看起来更好,更少的代码供您直接维护等。您可以在http://github.com/matej/MBProgressHUD

找到它

我使用它的方法是创建UITableViewController的子类并定义一些显示和隐藏HUD视图的方法。从那里,我在加载或完成加载时调用每个相关方法。

具体来说,我有四种方法:-hudView,-showLoadingUI,-showLoadingUIWithText:和-hideLoadingUI。

-hudView创建一个新的MBProgressHUD对象(如果尚未存在),并将其添加到当前视图([self.view addSubview:hudView])。

-showLoadingUI调用-showLoadingUIWithText:使用默认标题-showLoadingUIWithText:只需取消隐藏MBProgressHUD并为其设置标签值(self.hudView.labelText = @“foo”;)。

-hideLoadingUI隐藏了hudView([self.hudView hide:YES])。

答案 1 :(得分:1)

首先,我认为UIView没有名为init的方法。你可以打电话给它的超级。您应该调用的适当方法是- (id)initWithFrame:(CGRect)aRect。框架是您要显示的视图的位置和大小。 More here

另一件事是你打电话给[super.view addSubView:],我认为它应该是self.view,不是吗?