Objective c iCarousel和UITextView--空白文本视图

Objective c iCarousel和UITextView--空白文本视图,objective-c,uitextview,icarousel,Objective C,Uitextview,Icarousel,我正在使用iCarousel显示可编辑的问题卡。这些卡片包含一个UITextView,用于输入问题(或者在刷卡时已经包含文本)。但是,当显示和滚动旋转木马时,有时文本视图显示为空 这是由于UITextView优化了不在屏幕外绘制文本。但是UITableView中的文本视图不会受到这种影响 许多人都知道,由于优化,使用setNeedsDisplay将无法工作,因此它不会重新绘制文本。 我目前通过添加然后删除1px来更改文本视图的框架。这迫使重新绘制。但是,我只能在项目更改时执行此操作。iCarou

我正在使用iCarousel显示可编辑的问题卡。这些卡片包含一个UITextView,用于输入问题(或者在刷卡时已经包含文本)。但是,当显示和滚动旋转木马时,有时文本视图显示为空

这是由于UITextView优化了不在屏幕外绘制文本。但是UITableView中的文本视图不会受到这种影响

许多人都知道,由于优化,使用setNeedsDisplay将无法工作,因此它不会重新绘制文本。

我目前通过添加然后删除1px来更改文本视图的框架。这迫使重新绘制。但是,我只能在项目更改时执行此操作。iCarousel没有willDisplayCell委托方法。(尼克,你能简单地添加一个吗?代码让我困惑)

由于iCarousel正在预加载许多视图以实现平滑(这是必要的,设置iCarouseOptionVisibleItems并不能解决任何问题),因此,除了知道视图何时会出现在屏幕上之外,我似乎没有什么可以做的。建议

- (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];
    ...

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

我有一个解决方案,可能比你找到的更干净一些;只需将此添加到您的MICardView:

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

这基本上会在每次回收cardView时强制textView重新布局,并避免您必须在视图控制器中执行任何特殊操作来解决此问题。

您是否可以粘贴viewForItemAtIndex方法,以便我检查您在视图回收方面是否有任何错误?我以前从未遇到过文本字段在屏幕外无法正确调整大小的问题。已更新为包含viewForItemAtIndex。我认为实现非常清晰,与UITableView实现内联。问题不在于调整大小。UITextView未将文本绘制到屏幕外。问题是否与使用CGRectNull作为初始帧有关?CGRectZero(或实际的非零rect)可能工作得更好。大小调整是正确的。UITextView是一个UIScrollView子类。UITextField中未使用优化。我想我会试着找点时间整理一个单独的示例项目,因为我肯定你很忙。我感谢你在这件事上的帮助,尼克!好的,Nick,我有一个展示问题的示例项目。我会发电子邮件给你的。一个优雅的解决方案。我个人在加载视图时将文本视图设置为CGRectZero,并在didMoveToSuperview中设置适当的frame rect。我之所以选择此选项,是因为设置相同的框架不会导致文本视图进行文本布局和绘图(作为UITextView优化的一部分)。谢谢你,尼克。