2012-10-23 29 views
0

我使用iCarousel显示可编辑的问题卡。这些卡片包含一个用于输入问题的UITextView(或者在您滑过填充卡时已经包含文本)。但是,当传送带呈现并滚动时,有时文本视图会显示为空。iCarousel和UITextView的 - 空白文本视图

这是由于没有绘制文本屏幕外的一个UITextView优化。但是UITableView中的文本视图不会因此受到影响。

很多人都知道,使用setNeedsDisplay不会因为优化而工作,所以它不会重绘文本。

我目前通过添加,然后除去1px的改变文本视图的帧。这迫使重绘。但是,我只能在项目更改时执行此操作。 iCarousel没有willDisplayCell委托方法。 (尼克,你能很容易地添加一个?该代码令我感到困惑

因为iCarousel被预载平滑许多意见(这是必要的,设置iCarouselOptionVisibleItems不能解决任何)似乎没有被我可以做的任何事情,但知道什么时候视图即将在屏幕上。建议?

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view 
{ 
    MIQuestionView *questionView = (MIQuestionView *)view; 

    if (questionView == nil) 
    { 
     MIQuestionType type = [self.testSection.questionType integerValue]; 
     questionView = [[MIQuestionView alloc] initWithFrame:CGRectNull questionType:type]; 
     questionView.delegate = self; 
    } 

    questionView.question = [self.testSection.questions objectAtIndex:index]; 

    return questionView; 
} 

文本视图嵌入在MIQuestionView中。文本在问题设置器中设置。我无法知道它何时进入屏幕。要清楚,我不想调整大小。屏幕上显示的文字不是在屏幕外显示并显示为空白。

对不起,我没有看上面暧昧代码:

- (id)initWithFrame:(CGRect)frame questionType:(MIQuestionType)type 
{ 
    if (CGRectEqualToRect(frame, CGRectNull)) 
     frame = CGRectMake(0, 0, 650, 244); 

    self = [super initWithFrame:frame]; 
    ... 
+0

你能在你的viewForItemAtIndex方法粘贴,所以我可以检查你没有犯任何错误的观点回收?我还没有遇到过这个问题,因为文本字段没有正确调整屏幕之前的大小。 –

+0

更新为包含viewForItemAtIndex。我认为很明确的实现,与UITableView实现内联。问题不在调整。 UITextView不会在屏幕外画文字。 –

+0

问题可能与CGRectNull作为初始框架的使用有关吗? CGRectZero(或实际的非零矩形)可能会更好。 –

回答

1

这是一个奇怪的错误。我不知道是否与iCarousel问题或只是一个你需要处理时动态添加和从视图层次去除UITextViews的iOS怪癖。

我有一个解决方案,它可能比你虽然上发现的清洁了一下;只需添加到您的MICardView:

- (void)didMoveToSuperview 
{ 
    if (self.superview) 
    { 
     _textView.frame = self.bounds; 
    } 
} 

这基本上强制的TextView每次cardView循环时间重新布局,它可以避免你做什么特别的事情在您的视图控制器来解决该问题。

+0

一个优雅的解决方案。我在加载视图时将文本视图设置为CGRectZero,并在didMoveToSuperview中设置适当的框架矩形。我选择这个是因为设置相同的框架不会导致文本视图进行文本布局和绘图(作为UITextView优化的一部分)。谢谢Nick。 –