0

当我尝试将 ATMHud 添加到 uitableviewcontroller 子视图时,它确实可以工作,但不会禁用滚动,如果 tableview 不在顶部,我就看不到 hud 视图。我所做的被添加到了 tabBarController.view 中,但我想知道这是否是一个好主意,或者稍后我可能会遇到问题。

另一个问题是tabBarController.view 框架是整个屏幕还是只是底部。atmhud 怎么会显示在屏幕中间?

提前致谢!

============ 找到一篇博文,说明如何在uitableviewcontroller中分别重置self.view和添加tableview

UITableViewController 和固定子视图

- (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。让我知道这是否是设置表格视图的好方法

4

1 回答 1

1

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

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

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

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

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

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

如果你想要一个 ARCified 和经过现场测试的版本,你可以在这里获取

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
于 2012-08-13T17:39:31.613 回答