如何将button放在UITableView上,它不会在iOS中随表格滚动

我想把button放在UITableView ,它保持在屏幕的相同位置,不会用UITableView滚动。 当我试图添加子addSubviewbutton时,它们显示,但与UITableView滚动。

把button放在UITableView原因是让用户对它进行一些操作。 我不是在说细胞中有button。 他们是浮动的button,从不移动他们的位置。

我正在使用UITableViewController ,我不想使用页眉或页脚来达到此目的。 另外一些酒吧(例如UIToolbar )不是我的select。

提前致谢。

一个解决scheme是扩展UIViewController而不是UITableViewController 。 您将需要添加您自己的表格视图,并设置一切。 然后,您可以将您的button添加到视图控制器的视图,而不是表视图。

你也可以用UITableViewController (不需要普通的UIViewController ,它嵌套你的表或VC)

通过滚动表格,你需要调整“浮动”视图的位置,它会很好

如果你在UITableViewController中,只是

如果你想浮在UITableView的顶部的视图

 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGRect frame = self.floatingView.frame; frame.origin.y = scrollView.contentOffset.y; self.floatingView.frame = frame; [self.view bringSubviewToFront:self.floatingView]; } 

如果你想漂浮在UITableView底部的视图

 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGRect frame = self.floatingView.frame; frame.origin.y = scrollView.contentOffset.y + self.tableView.frame.size.height - self.floatingView.frame.size.height; self.floatingView.frame = frame; [self.view bringSubviewToFront:self.floatingView]; } 

我相信这是你的问题的真正答案

如果你正在使用导航控制器,你可以添加视图到它:

 [self.navigationController.view addSubview:yourView]; 

例:

 UIButton *goToTop = [UIButton buttonWithType:UIButtonTypeCustom]; goToTop.frame = CGRectMake(130, 70, 60, 20); [goToTop setTitle:@"go to top" forState:UIControlStateNormal]; [goToTop addTarget:self action:@selector(goToTop) forControlEvents:UIControlEventTouchUpInside]; [goToTop setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; [goToTop.layer setBorderColor:[[UIColor whiteColor] CGColor]]; goToTop.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:13]; [self.navigationController.view addSubview:goToTop]; 

如果你想显示一个覆盖表格视图的静态控制视图,你有三个select:

1)不要使用UITableViewController。 相反,用UITableView子视图创build一个UIViewController,并将你的Table View委托/数据源代码放在UIViewController中。 这个选项可能会也可能不会工作,这取决于您的应用程序的架构。 例如,如果你试图用很多自定义逻辑实现一个UITableViewController的子类,这是不理想的。

2)WWDC 2011的方法。 请参阅WWDC 2011会话125“UITableView更改,提示和技巧”,从32:20开始。 AutoLayout引入到iOS之前,我们有很多不同的屏幕尺寸来处理之前,苹果公司build议在桌面视图滚动时调整视图的位置。 我不build议这样做,因为您将自己pipe理所有不同屏幕尺寸的位置。

3) 我推荐使用UIViewController和容器视图,它将包含你的UITableViewController。 这样,你可以保持UITableViewController中的表视图逻辑分离。 UIViewController托pipeUITableViewController的“哑”容器,它也包含静态控制视图。 为此,将UIViewController拖放到故事板,并在其中拖动一个“容器视图”。 删除自动附加到容器视图的UIViewController,然后通过控件从容器视图拖动到表视图控制器并select“embedded”来附加要在容器视图中显示的表视图控制器。 现在,您可以将静态控件添加为UIViewController的子视图,该视图将显示在表视图的顶部。 它看起来像这样:

Storyboard对于容器视图内的UITableViewController

我更喜欢这种方法,因为UIViewController可以处理控制逻辑,UITableViewController处理表格视图逻辑。 其他一些答案build议将静态控件作为子视图添加到导航控制器或窗口。 这些只有在您从不将另一个视图控制器添加到导航控制器或窗口时才起作用。

你可以在UIWindow上添加button,不需要将它扩展到UIViewController而不是UITableviewController.Just在窗口上添加button。

 UIWindow *window = [[UIApplication sharedApplication] keyWindow]; UIButton *btn =[UIButton buttonWithType:UIButtonTypeCustom]; [btn setFrame:CGRectMake(60, 200,40, 60)]; [btn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; [window addSubview:btn]; 

我创build了一个库,以便在UITableView / UICollectionView / UIScrollView上添加一个浮动button。 被称为MEVFloatingButton 。

这些是使用它的步骤。

1-导入类别文件

#import "UIScrollView+FloatingButton.h"

2 – 添加委托和可选的委托方法。

  @interface ViewController () <MEVFloatingButtonDelegate> #pragma mark - MEScrollToTopDelegate Methods - (void)floatingButton:(UIScrollView *)scrollView didTapButton:(UIButton *)button; 

2 – 创build一个MEVFloatingButton对象。

 MEVFloatingButton *button = [[MEVFloatingButton alloc] init]; button.animationType = MEVFloatingButtonAnimationFromBottom; button.displayMode = MEVFloatingButtonDisplayModeWhenScrolling; button.position = MEVFloatingButtonPositionBottomCenter; button.image = [UIImage imageNamed:@"Icon0"]; button.imageColor = [UIColor groupTableViewBackgroundColor]; button.backgroundColor = [UIColor darkGrayColor]; button.outlineColor = [UIColor darkGrayColor]; button.outlineWidth = 0.0f; button.imagePadding = 20.0f; button.horizontalOffset = 20.0f; button.verticalOffset = -30.0f; button.rounded = YES; button.hideWhenScrollToTop = YES; 

4 – 分配button和委托给UITableView。

 [self.tableView setFloatingButtonView:button]; [self.tableView setFloatingButtonDelegate:self] 

演示结果

演示 演示 演示

为了迅速:

 override func scrollViewDidScroll(scrollView: UIScrollView){ var frame: CGRect = self.floatingView.frame frame.origin.y = scrollView.contentOffset.y floatingView.frame = frame view.bringSubviewToFront(floatingView) } 

每次滚动时都会调用这个函数。 然后在里面你得到你的UIView框架和更新其位置取决于你滚动多less。 你的UIView不断地移动着你的UIScrollView,所以给用户看起来就像它的浮动。

我刚刚看到了WWDC 2011的TableView,提示和技巧video。 浮动视图是完全一样的事情。所有你需要做的是改变框架回到scrollViewDidScroll原来的位置。

https://developer.apple.com/videos/wwdc/2011/

检查videoTableViews提示和技巧。