将ATMHud添加到tabBarController.view是否有意义

时间:2012-08-13 17:20:03

标签: objective-c ios uitableview

当我尝试将ATMHud添加到uitableviewcontroller子视图时,它确实有效,但它不会禁用滚动,如果tableview不在顶部,则无法看到hud视图。我所做的是添加到tabBarController.view,但是我想知道这是一个好主意还是以后我可能会遇到问题。

另一个问题是tabBarController.view框架是整个屏幕还是仅仅是底部。为什么atmhud会在屏幕中间显示出来?

提前致谢!

============ 找到一篇博文,展示如何在uitableviewcontroller

中单独重置self.view并添加tableview

UITableViewController and fixed sub views

- (void)viewDidLoad {
    [super viewDidLoad];

    if (!tableView &&
        [self.view isKindOfClass:[UITableView class]]) {
            tableView = (UITableView *)self.view;
    }

    self.view = [[[UIView alloc] initWithFrame:
        [UIScreen mainScreen].applicationFrame] autorelease];
    self.tableView.frame = self.view.bounds;
    self.tableView.contentInset = UIEdgeInsetsMake(44.0, 0.0, 0.0, 0.0);
    [self.view addSubview:self.tableView];

    UIView *fixedBar = [[UIView alloc] initWithFrame:
        CGRectMake(0.0, 0.0, self.view.bounds.size.width, 44.0)];
    fixedBar.backgroundColor = [UIColor colorWithRed:
        0.0 green:1.0 blue:0.0 alpha:0.7];
    [self.view addSubview:fixedBar];
    [fixedBar release];                       
}

在此之后将hud添加到self.view时,您将能够禁用底部的tableview。 如果这是设置tableview的好方法,请告诉我

1 个答案:

答案 0 :(得分:1)

使用标签栏的问题是,hud现在是模态的,用户无法更改标签。

听起来桌面视图不是你的主要观点,因为它可以被“掩盖”。如果它不是主视图,则将ATMHud添加到self.view。如果tableView与self.view相同,则向其添加新的透明视图,然后将HUD添加到该视图。

tabBarController.view是托管选项卡式视图的视图 - 如果要查看其大小(或框架),请使用NSStringFromCGRect(self.tabBarController.frame)记录它;

编辑:我刚做了一个测试,ATMHud DOES阻止了用户界面。我只能想到你没有把它插入你需要的地方(在当前视图的子视图的顶部。)我有一个演示项目,我这样做:

hud = [[ATMHud alloc] initWithDelegate:self];
[self.view addSubview:hud.view];
[hud setCaption:@"Howdie"];
[hud setActivity:YES];
[hud show];
[hud hideAfter:5];

hud下的按钮未激活 - 实际上视图中没有任何内容处于活动状态(可能导航栏可能会处于活动状态)

如果您需要ARCified和现场测试版本,可以抓住它here

EDIT2:您的问题的解决方案如下。请注意,ATMHud会阻止点击进入表格,下面的代码会停止滚动:

- (void)hudWillAppear:(ATMHud *)_hud
{
    self.tableView.scrollEnabled = NO;
}
- (void)hudDidDisappear:(ATMHud *)_hud
{
    self.tableView.scrollEnabled = YES;
}

转储视图:

#import <QuartzCore/QuartzCore.h>

#import "UIView+Utilities.h"

@interface UIView (Utilities_Private)

+ (void)appendView:(UIView *)v toStr:(NSMutableString *)str;

@end

@implementation UIView (Utilities_Private)

+ (void)appendView:(UIView *)a toStr:(NSMutableString *)str
{
    [str appendFormat:@"  %@: frame=%@ bounds=%@ layerFrame=%@ tag=%d userInteraction=%d alpha=%f hidden=%d\n", 
        NSStringFromClass([a class]),
        NSStringFromCGRect(a.frame),
        NSStringFromCGRect(a.bounds),
        NSStringFromCGRect(a.layer.frame),
        a.tag, 
        a.userInteractionEnabled,
        a.alpha,
        a.isHidden
        ];
}

@end

@implementation UIView (Utilities)

+ (void)dumpSuperviews:(UIView *)v msg:(NSString *)msg
{
    NSMutableString *str = [NSMutableString stringWithCapacity:256];

    while(v) {
        [self appendView:v toStr:str];
        v = v.superview;
    }
    [str appendString:@"\n"];

    NSLog(@"%@:\n%@", msg, str);
}

+ (void)dumpSubviews:(UIView *)v msg:(NSString *)msg
{
    NSMutableString *str = [NSMutableString stringWithCapacity:256];

    if(v) [self appendView:v toStr:str];
    for(UIView *a in v.subviews) {
        [self appendView:a toStr:str];
    }
    [str appendString:@"\n"];

    NSLog(@"%@:\n%@", msg, str);
}

@end