我需要在表格视图本身的背景中,在表格视图的底部而不是单元格中执行隐藏按钮。
我在游戏中看到了类似的东西"我的水在哪里",如果你滚出界限,你可以找到一个隐藏的按钮。
首先,我创建了一个简单的按钮,并放置在表视图的底部
self.tableView.backgroundColor = [UIColor purpleColor]; //just to see better
UIButton *venom = [[UIButton alloc] initWithFrame:CGRectMake(50.0, self.tableView.contentSize.height+80.0, 100.0, 40.0)];
venom.backgroundColor = [UIColor redColor];
[venom addTarget:self action:@selector(venomAction) forControlEvents:UIControlEventTouchDown];
[self.tableView addSubview:venom];
由于self.tableView.contentSize.height+80.0
,我需要滚出表格视图的边界才能看到按钮,如下所示:
结果是正确的,我希望这有点隐藏,但问题是,我无法点击按钮,看到按钮,我需要滚动,我不能多点触控。
任何人都可以帮助我吗?或指向正确的方向
答案 0 :(得分:0)
我将按钮设置为tableView的子视图,而不是tableView上方的兄弟视图。
例如,您的代码可能如下所示
- (void)viewDidLoad {
[super viewDidLoad];
// Just creating a simple UITableView
UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
tableView.dataSource = self;
tableView.delegate = self;
self.tableView = tableView;
[self.view addSubview:tableView];
// Creating the Easter Egg Button
UIButton *easterEggButton = [UIButton buttonWithType:UIButtonTypeSystem];
[easterEggButton setTitle:@"Easter Egg Button" forState:UIControlStateNormal];
[easterEggButton addTarget:self
action:@selector(easterEggButtonPressed)
forControlEvents:UIControlEventTouchUpInside];
self.easterEggButton = easterEggButton;
// NOTE that we add the Easter Egg Button to self.view over the Table View, not into Table View
[self.view addSubview:easterEggButton];
}
因此我们将按钮放在tableView上。这使得它不会干扰tableView的gestureRecognizer 现在你需要一些代码来调整按钮的框架,使其放在tableView的最后一个单元格下面的某个位置。它可能看起来像这样:
- (void)updateButtonFrame {
UIButton *button = self.easterEggButton;
// Just the easiest way calculate the width and height of the button depending on it's content
[button sizeToFit];
CGRect frame = button.bounds;
// Now, we want to place the button under all the cells
frame.origin.y = self.tableView.contentSize.height;
frame.origin.y += 60.0f; // add some padding to place it even lower
/* We have calculated button's frame in tableView's coordinate space, so we need to convert it to
* button superview's coordinate space. */
frame = [self.tableView convertRect:frame toView:button.superview];
// And finally apply the frame to the button
button.frame = frame;
}
当然,您需要在适当的时刻调用此布局方法,即每当tableView重新加载数据时(因为contentSize可能会更改),以及每当tableView滚动时。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
/* Button resides in self.view and is unaware of Table View scrolling, so we need to update
* it's frame whenever Table View's content offset changes */
[self updateButtonFrame];
}
如果tableView的单元格高度取决于屏幕方向等,您也可以称之为viewDidLayoutSubviews是安全的。
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
// It's safe to recalculate button's frame whenever self.view layout updates
[self updateButtonFrame];
}
您可以查看此示例实现 https://gist.github.com/bartekchlebek/429906e05fcbd976291d