UITableView视图层级的变化
iOS7 UITableView的视图层级变化
在iOS的开发过程中,我们经常需要对某个页面的数据为空的时候进行提示,特别是UITableView
和UICollectionView
。而在github上面,有一个专门的三方库处理这种空数据的提示页面,DZNEmptyDataSet。我在使用的过程中,发现一个iOS7上面的bug,点击空提示页面,事件不响应。分析原因是因为在iOS7上面,UITableView
多了一层UITableViewWrapperView
解决办法:在插入emptyDataSetView的方法dzn_reloadEmptyDataSet
中,作一下判断
- (void)dzn_reloadEmptyDataSet
{
if (![self dzn_canDisplay]) {
return;
}
if (([self dzn_shouldDisplay] && [self dzn_itemsCount] == 0) || [self dzn_shouldBeForcedToDisplay])
{
// Notifies that the empty dataset view will appear
[self dzn_willAppear];
DZNEmptyDataSetView *view = self.emptyDataSetView;
if (!view.superview) {
// Send the view all the way to the back, in case a header and/or footer is present, as well as for sectionHeaders or any other content
if (([self isKindOfClass:[UITableView class]] || [self isKindOfClass:[UICollectionView class]]) && self.subviews.count > 1) {
//修改的代码====================================
BOOL hasWrapperView = NO;
for (UIView *view in self.subviews) {
if ([view isKindOfClass:NSClassFromString(@"UITableViewWrapperView")])
{
hasWrapperView = YES;
}
}
if (hasWrapperView) {
[self insertSubview:view atIndex:1];
} else {
[self insertSubview:view atIndex:0];
}
}
else {
[self addSubview:view];
}
}
//修改的代码====================================
// ......
}
和这类似的问题
在UITableViewCell
中,iOS也会多一层UITableViewCellScrollView
stackoverflow相似的问题其中提供的一种通过subView去找当前的UITableViewCell
的方法不错
UITextField* textField = (UITextField*)sender;
NSIndexPath* indexPath = [self.tableView indexPathForRowAtPoint:[self.tableView convertPoint:textField.center fromView:textField.superview]];