iCarousel和UITextView - 空白文本视图

时间:2012-10-23 01:15:22

标签: objective-c uitextview icarousel

我正在使用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];
    ...

1 个答案:

答案 0 :(得分:1)

这是一个奇怪的错误。我不确定在动态添加和删除视图层次结构中的UITextView时,您是否需要处理iCarousel或者只是一个iOS的怪癖。

我有一个解决方案,可能比你发现的解决方案更清洁;只需将其添加到您的MICardView:

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

这基本上强制textView在每次回收cardView时重新布局,并且它避免了你在视图控制器中做任何特殊事情来解决这个问题。