UITableView视图层级的变化

UITableView视图层级的变化

iOS7 UITableView的视图层级变化

在iOS的开发过程中,我们经常需要对某个页面的数据为空的时候进行提示,特别是UITableViewUICollectionView。而在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也会多一层UITableViewCellScrollViewstackoverflow相似的问题其中提供的一种通过subView去找当前的UITableViewCell的方法不错

UITextField* textField = (UITextField*)sender;
NSIndexPath* indexPath = [self.tableView indexPathForRowAtPoint:[self.tableView convertPoint:textField.center fromView:textField.superview]];

你可能感兴趣的:(UITableView视图层级的变化)