2012-03-14 61 views
0

我有酥料饼的屏幕,里面坐了:的UITableViewCell变得反应迟钝

  • 的标签,可能会或可能不会出现(标题)
  • 一个搜索栏,可能会或可能不会出现
  • 一个可能或可能不会出现的标签,并且具有可变高度(帮助标签)
  • 滚动视图,其可能会或可能不会出现,并且具有可变高度(关于下表的一些信息)
  • 表查看

为了呈现一些不错的东西,在viewDidLoad中,我移动了各种帧以正确放置对象,并且没有未使用的空间让我的弹出窗口混乱。此外,我然后调整表格(以获取最需要的位置),并通过contentSizeInPopover(避免出现近乎空的巨大弹出窗口)弹出窗口。所有调整大小似乎很好,但我有一个大问题:所有调整大小完成后,我的UITableView的一些单元格变得没有响应。一个或两个单元格,通常是第二个单元格,只在我点击它们的外角时才会做出响应,但单元格的其余部分完全忽略了任何触摸。

我试过一切:全部移动到viewWillAppear,让autoresize完成它的工作(似乎也没有工作),但我每次都会遇到这个问题。我发现,如果我评论涉及更改表格的framecontentSizeInPopover中的问题时遇到的问题,问题就会停止,但随后我的观点就会混乱,所以这不是一个解决办法。

如果有人可以给我一些东西摆脱这个混乱,那将是非常棒的。

 
- (CGFloat)getHeightWithoutTable { 
    return LIST_TITLE_HEIGHT + (self.searchBar.hidden ? 0 : LIST_SEARCH_BAR_HEIGHT) + (self.helpLabel.hidden ? 0 : self.helpLabel.frame.size.height + LIST_STD_SPACE) + (self.errorScrollView.hidden ? 0 : self.errorScrollView.frame.size.height + LIST_STD_SPACE); 
} 

-(void)viewDidLoad { 
    [super viewDidLoad]; 
    self.tableViewOutlet.backgroundView = nil; 
    self.originData = [NSMutableArray array]; 
    self.searchedData = [NSMutableArray array]; 
    if (self.helper != nil) { 
     CGFloat heightOffset = 0; 
     // Content 
     self.originData = [self.helper getData]; 
     self.tableData = [NSMutableArray arrayWithArray:self.originData]; 
     // Title 
     NSString *title = [self.helper getPopoverTitle]; 
     if (title == nil) { 
      self.popoverTitle.hidden = YES; 
      heightOffset -= LIST_TITLE_HEIGHT; 
     } else { 
      self.popoverTitle.text = [self.helper getPopoverTitle]; 
     } 
     // Search 
     if ([self.originData count] [self getStdHeight]/3){ 
       self.helpLabel.lineBreakMode = UILineBreakModeTailTruncation; 
       [self.helpLabel sizeThatFits:CGSizeMake(self.helpLabel.frame.size.width, [self getStdHeight]/3)]; 
      } 

      heightOffset += (self.helpLabel.frame.size.height - LIST_HELP_STD_HEIGHT); 
     } 
     // Errors 
     if ([self.helper respondsToSelector:@selector(getErrors)]) { 
      self.errors = [self.helper getErrors]; 
     } 
     if (self.errors == nil || [self.errors count] == 0) { 
      self.errorScrollView.hidden = YES; 
      self.errorBg.hidden = YES; 
      heightOffset -= LIST_ERROR_STD_HEIGHT + LIST_STD_SPACE; 
     } else { 
      [self createErrorView]; 
      heightOffset += (self.errorScrollView.frame.size.height - LIST_ERROR_STD_HEIGHT); 
     } 
     // Table 
     CGFloat previewHeight = LIST_CELL_HEIGHT * [self.tableData count] + LIST_STD_SPACE; 
     CGFloat remainingHeight = LIST_MAX_HEIGHT - [self getHeightWithoutTable] - LIST_STD_SPACE; 
     CGFloat tableHeight = MIN(previewHeight, remainingHeight); 
     CGRect tableFrame = self.tableViewOutlet.frame; 
     self.tableViewOutlet.frame = CGRectMake(tableFrame.origin.x, tableFrame.origin.y + heightOffset, LIST_WIDTH, tableHeight); 
     // Selected items 
     if ([helper getSelectedObject] != nil){ 
      int index = [self.tableData indexOfObject:[helper getSelectedObject]]; 
      NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0]; 
      [self.tableViewOutlet scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
     } 
    } 
} 

- (CGSize)contentSizeForViewInPopover { 
    if (self.navigationController) { 
     return CGSizeMake(LIST_WIDTH, LIST_MAX_HEIGHT); 
    } else { 
     CGFloat totalHeight = [self getHeightWithoutTable] + self.tableViewOutlet.frame.size.height + LIST_STD_SPACE; 
     return CGSizeMake(LIST_WIDTH, totalHeight); 
    } 
} 

gist如果你需要一些色彩来帮助你)

笔尖的图像:因为你没有提供

nib

回答

0

我自己找到了答案:我在我的UITableView旁边使用了一个自填充的UIScrollView似乎是问题所在。只要我用适当的UITableView替换了UIScrollView,问题就消失了。

0

在黑暗中只是一个镜头,任何码。如果您要将事物添加到UITableCellView中,请记住很多组件的UserInteractionEnabled设置为NO,这将禁用与其交互的功能。确保您添加到单元格中的任何项目可能占用您正在点击的空间(大概是单元格的中心?)将其UserInteractionEnabled设置为YES

边缘可能仍然工作的原因是UITableCellView由3个主要部分组成,所以您可能只会更改中心部分。

发表一些代码,然后我们可以有一个更好的看看。

+0

只需添加代码和图像 – 2012-03-14 16:42:04

相关问题