在UITableViewController中创建UIView,它不随表视图移动

时间:2014-12-15 15:13:31

标签: ios objective-c uiview

当我调用UIView方法时,我想在UITableViewController的中心显示一个小showHud个文字。

- (void) showHud {

    UIView *paintView=[[UIView alloc]initWithFrame:CGRectMake(150, 150, 120, 30)];
    [paintView setBackgroundColor:[UIColor yellowColor]];
    [self.view addSubview:paintView];

}

实际上,这段代码的问题在于,当我滚动tableview时,视图不会停留在它的位置上。有可能以某种方式固定它吗?

4 个答案:

答案 0 :(得分:3)

我不认为你可以使用UITableViewController实现这一点,因为这种控制器的view属性是一个UITableView,因此内容将始终随之滚动。

您需要创建一个常规的UIViewController并将UITableView添加到该控制器的主视图中。然后,您添加到该主视图的任何其他内容都将保留在表视图之外。

答案 1 :(得分:1)

尝试实施scrollViewDidScroll委托方法,并根据tableview偏移量更改paintView的框架。

例如:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
  CGPoint offset = scrollView.contentOffset
  [paintView setFrame:CGRectMake(150, 150+offset.y, 120, 30)];
}

但最好的方法是创建一个简单的UIViewController。 由于pullToRefresh控制器,你必须使用UItableViewController吗?

答案 2 :(得分:1)

UI可以向窗口添加视图并将其放置在最前面:

UIView testView = [[UIIView alloc]initWithFrame:CGRectMake(10, [[UIScreen mainScreen]applicationFrame].size.height - 85 , 75, 75)]; [[[[[NSApplication sharedApplication] mainWindow] contentView] addSubview:testbox]; addSubview: testView]; testView.layer.zPosition = MAXFLOAT;

答案 3 :(得分:0)

UITableViewController通常嵌入在“父”视图控制器中,如UINavigationController。然后,UITableView会有一个超级视图,例如UINavigationControllerWrapperView。即使您的表视图控制器是根视图控制器,表视图的超级视图也是UIWindow

因此,您可以放心地假设您的表格视图始终具有超级视图。然后将UIView添加到此超级视图而不是表格本身:

//Note: frame should be different here as it's in the superview's coordinate system
UIView *paintView=[[UIView alloc]initWithFrame:CGRectMake(150, 150, 120, 30)];  
[paintView setBackgroundColor:[UIColor yellowColor]];
[self.view.superview addSubview:paintView];