2012-02-24 11 views
0

UITextViewsの束を作成して別のビューに配置するコードがあります。 backgroundColorを交互の色に変更し、常にtextColorを黒に設定します。最後に作成されたものを除いて、すべてうまく動作します。それは、textColorをテキストビューのbackgroundColorに変更してUIの更新を停止します。UITextView textColorが自動的に背景色と同じになる

GDBで問題となるtextColorの値をチェックすると、そのように表示されなくても黒色になります。次に、ボタンを押して、作成されたテキストビュー全体をループし、textColorsをすべて紫色に設定します。最後のものを除いて、すべて変更されます。背景色はテキスト色と同じです。もう一度、GDBをチェックすると、textColorの値は紫色に設定されますが、これは画面に反映されません。

WTF?!?!?!何か案は?これはちょうどバグでしょうか?

ここには、UITextViewsを追加するためのコードがあります。その間にはUILabelsがありますので、テキストを中央に置くことができます。

UIColor *evenColor = [self RGBColorR:90 G:95 B:90]; 
UIColor *oddColor = [self RGBColorR:70 G:75 B:70]; 

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 
    // Loop through adding the buttons. 
    for (int i = 0; i < numberOfSections; i++) { 
     // Add the label for the actual title of the level. 
     UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, ((i * sectionHeight) - 1), self.levelLablesView.frame.size.width, 30)]; 
     [label setText:[levels objectAtIndex:i]]; 
     label.font = [UIFont fontWithName:@"Helvetica-Bold" size:24]; 
     [label setTextAlignment:UITextAlignmentCenter]; 
     [label setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; 
     if (i % 2 == 0) { 
      // It's an even number. 
      [label setBackgroundColor:evenColor]; 
     } else { 
      // Its an odd number. 
      [label setBackgroundColor:oddColor]; 
     } 
     [self.levelLablesView addSubview:label]; 
     [label release]; 

     // Add a scrolling UITextView for the other stuff. 
     UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0, ((i * sectionHeight) + 24), self.levelLablesView.frame.size.width, (sectionHeight - 24))]; 
     [textView setText:[[[dictionary objectForKey:self.chosenCategory] 
          objectForKey:[levels objectAtIndex:i]] 
          objectForKey:@"Description"]]; 
     [textView setEditable:NO]; 
     [textView setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; 
     if (i % 2 == 0) { 
      // It's an even number. 
      [textView setBackgroundColor:evenColor]; 
     } else { 
      // Its an odd number. 
      [textView setBackgroundColor:oddColor]; 
     } 
     if (i == (numberOfSections-1)) { 
      [textView setFrame:CGRectMake(0,((i * sectionHeight) + 24), self.levelLablesView.frame.size.width, ((sectionHeight - 24) + 2))]; 
     } 
     textView.font = [UIFont systemFontOfSize:24]; 
     [textView setTextColor:[UIColor blackColor]]; 

     [self.levelLablesView addSubview:textView]; 
     [textView release]; 
    } 

} 

編集:誰もが疑問に思っている場合は、私は事故によってプログラムにどこか他のテキストの色を設定しないでください。私は "textColor"のための検索を行い、私が得る唯一のマッチは無関係です。

+0

クラッシュ時にどのようなエラーが発生しますか? – dbrajkovic

+0

ここであなたはテキストの色を設定しています – fibnochi

+0

@dbrajkovicそれは決してクラッシュしません。それは最悪の部分です。 :( –

答えて

1

私はハックでこれを修正しました。私はこれがバグだと思う。

元々、私はUIViewをUITextViewの背後にある背景色で塗りつぶしました。

しかし、UITextViewをスクロールすると、背景色が設定されている色に変更されることがわかりました。 だから私は私の.hにBOOL alreadyScrolled;を追加し、(最初のチェックがモーダルビューが提示されている場合viewDidAppear:は、例えば、複数回呼び出されることができるので、それはalreadyScrolledをしていないことを確認した)viewDidAppear:[self scrollLevelLabelsViews]への呼び出しを追加して、コメントを追加ビューをスクロールする次のメソッド。私はまた、テキストを正しく表示していない最後のテキストビューで問題が発生していましたが、ビューが表示された後にalreadyScrolledメソッドが生成されるまで無視すると、表示がうまくなります。

以下は、テキストビューをスクロールダウンしてバックアップするために作成したメソッドです。 levelLablesViewをtextViewsを含むビューに変更し、最後の段落で説明したメソッド呼び出しと変数を追加してください。それはあなたのために機能するはずです。

- (void)scrollLevelLabelsViewsBackUp{ 

    // Scroll all UITextViews in levelLabelsView to the top. 
    for (UIView *view in self.levelLablesView.subviews) { 
     if ([view isKindOfClass:[UITextView class]]) { 
      UITextView *textView = (UITextView *)view; 
      [textView scrollRangeToVisible:NSMakeRange(1, 1)]; 
     } 
    } 
    alreadyScrolled = YES; 

} 

- (void)scrollLevelLabelsViews{ 

    /* Setup last UITextView that displays weirdly if it is set up with the rest of them. 
    * ... 
    */ 

    // Scroll all UITextViews in levelLabelsView to the bottom. 
    for (UIView *view in self.levelLablesView.subviews) { 
     if ([view isKindOfClass:[UITextView class]]) { 
      UITextView *textView = (UITextView *)view; 
      [textView scrollRangeToVisible:NSMakeRange([[textView text] length] - 2, 1)]; 
     } 
    } 

    // In .8 seconds, scroll them back up. 
    [NSTimer scheduledTimerWithTimeInterval:.8 target:self selector:@selector(scrollLevelLabelsViewsBackUp) userInfo:nil repeats:NO]; 

} 

これは、それがユーザーをすることができますよう、あなたがこの問題を持っていない場合でも、ちょうどクールな効果もあり、彼らは見ることができないと、テキストビューがスクロール可能であることがよりテキストがあることを知っています。

+0

私はここで同じ問題を抱えています。あなたはこれを解決するために何をしましたか?たぶん例? –

+0

@エリックはい、私はお詫びします。問題を解決するために私が使った "ハック"で私の答えを更新しました。 –

0

numberOfSectionsはどのように設定されていますか?

多分試してみてください。

for (int i = 0; i <= numberOfSections; i++) { 
関連する問題