Ios 在UITableViewController中创建不随表视图移动的UIView

Ios 在UITableViewController中创建不随表视图移动的UIView,ios,objective-c,uiview,Ios,Objective C,Uiview,我想在调用showHud方法时,在UITableViewController的中心显示一个小UIView,其中包含一些文本 实际上,这段代码的问题在于,视图并没有停留在它的位置上,当我滚动tableview时,它会随着单元格一起向上移动。有没有可能用别针把它固定住 我认为使用UITableViewController无法实现这一点,因为此类控制器的view属性是UITableView,因此内容将始终随它滚动 您需要创建常规UIViewController,并将UITableView添加到该控制器

我想在调用showHud方法时,在UITableViewController的中心显示一个小UIView,其中包含一些文本


实际上,这段代码的问题在于,视图并没有停留在它的位置上,当我滚动tableview时,它会随着单元格一起向上移动。有没有可能用别针把它固定住

我认为使用UITableViewController无法实现这一点,因为此类控制器的view属性是UITableView,因此内容将始终随它滚动


您需要创建常规UIViewController,并将UITableView添加到该控制器的主视图中。然后,添加到该主视图的任何其他内容都将保持不变,因为它位于表视图之外。

我认为使用UITableViewController无法实现这一点,因为此类控制器的view属性是UITableView,因此内容将始终随它滚动

您需要创建常规UIViewController,并将UITableView添加到该控制器的主视图中。然后,添加到该主视图中的任何其他内容都将保持不变,因为它位于表视图之外。

尝试实现scrollViewDidScroll委托方法,并根据表视图偏移更改paintView的帧

例如:

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

尝试实现scrollViewDidScroll委托方法,并根据tableview偏移更改paintView的帧

例如:

但是最好的方法是创建一个简单的UIViewController。
您必须使用UItableViewController,因为pullToRefresh控制器?

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;

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;
UITableViewController通常嵌入到父视图控制器中,如UINavigationController。它的UITableView将有一个超级视图,如UINavigationControllerRapperView。即使您的表视图控制器是根视图控制器,表视图的superview也是UIWindow

因此,您可以放心地假设表视图始终具有superview。然后将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];
UITableViewController通常嵌入到父视图控制器中,如UINavigationController。它的UITableView将有一个超级视图,如UINavigationControllerRapperView。即使您的表视图控制器是根视图控制器,表视图的superview也是UIWindow

因此,您可以放心地假设表视图始终具有superview。然后将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];

您需要从一个ViewController开始,在这一边您将tableView作为ViewController.view的子视图,现在您可以在tableView的正上方添加另一个子视图ViewController.view。别忘了实现“取消委托”和“数据源”协议,并将viewController作为tableView的委托。@OnikIV我必须使用UITableViewController,我曾尝试在情节提要中使用这种方式,但无法将tableView移动到视图下。请确保您正在尝试将UITableView添加到UIViewController。不要尝试将UITableViewController添加到UIViewController。@bushiko如果您不想将viewController从TableViewController更改为viewController,您需要直接将视图添加到UIWindow,因为它很重,但我认为您没有其他选择。如果您没有返回或前进的所有方法,为了删除窗口的此视图,上一个/下一个viewController将在顶部具有相同的视图,因为此视图位于应用程序窗口视图的顶部。当然会有一堆对象,而不是释放属性。但这不是性能问题,可能是用户体验不好的问题。你需要从一个ViewController开始,在这一边你将tableView作为ViewController.view的子视图,现在你可以在tableView的正上方添加另一个子视图。别忘了实现“取消委托”和“数据源”协议,并将viewController作为tableView的委托。@OnikIV我必须使用UITableViewController,我曾尝试在情节提要中使用这种方式,但无法将tableView移动到视图下。请确保您正在尝试将UITableView添加到UIViewController。不要尝试将UITableViewController添加到UIViewController。@bushiko如果您不想将viewController从TableViewController更改为viewController,您需要直接将视图添加到UIWindow,因为它很重,但我认为您没有其他选择。如果您没有返回或前进的所有方法,为了删除窗口的此视图,上一个/下一个viewController将在顶部具有相同的视图,因为此视图位于应用程序窗口视图的顶部。当然会有一大堆的obje
ct,则它们将被解除分配属性。但这不是性能问题,可能是用户体验不好。是的,我使用的自定义表视图类仅适用于UITableViewController。是的,我使用的自定义表视图类仅适用于UITableViewController。