我希望在我的应用中发生某些事情时显示一个简单的加载对话框。我想我会创建一个新视图,为其添加一个标签,然后将该视图设置为我当前视图的子视图。
这样做时,我什么也看不见!
以下是我编写方法的方法:
- (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];
但是当从一个方法加载它时,它似乎滞后,并且没有显示出来。
答案 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
,不是吗?