2012-08-13 31 views
0

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

另一个问题是tabBarController.view框架是整个屏幕或只是底部的一部分。如何在屏幕中间显示atmhud?

在此先感谢!

============ 发现了一个博客帖子里介绍如何重置self.view并分别在UITableViewController中

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];      
} 
添加的tableview

在此之后,将hud添加到self.view时,您将能够禁用底部的tableview。 让我知道这是一个很好的方式来设置表视图

回答

1

使用标签栏的问题是,hud现在是模式,并且用户不能更改选项卡。

这听起来像tableview不是你的主要视图,因为它可以“掩盖”。如果它不是主要视图,则将ATMHud添加到self.view。如果tableView与self.view相同,则为其添加一个新的透明视图,然后将HUD添加到该视图。如果你想看看它的大小(或框架),使用NSStringFromCGRect(self.tabBarController.frame)来记录它;如果你想查看它的大小(或框架),请使用NSStringFromCGRect(self.tabBarController.frame)。

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

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 
+0

感谢您的答复。没有意识到,这使得标签栏冻结。我想有没有简单的方法可以将视图放在tableview之上,如果它是一个uitableviewcontroller。当我添加到self.view它添加到tableview,但不冻结它,你可以滚动它离屏。我不知道这是一个问题还是标题让我失望投票? – Yan 2012-08-14 02:14:27

+1

我正在使用这个类(我在github上有一个分支),它非常棒。在添加HUD来拦截用户操作之前,我不得不添加自己的观点,但是当我看着ATMHud时,它也是这样做的。我需要进一步调查...我很快就会回到这里。 – 2012-08-14 10:38:06

+0

再次感谢您的回复。我认为这只发生在我有一个表视图控制器。当我有一个带有taleview的普通viewcontroller,并且我有[self.view addsubivew:hud.view],那么ATMHud会拦截用户操作。我在这里阅读了一些帖子,很难在tableview控制器中放置tableview顶部的视图。不知道这是否正确。 – Yan 2012-08-14 13:42:14

相关问题