我有一些代码可以创建一堆UITextViews
并将它们放入另一个视图中。我将backgroundColor更改为交替颜色,并始终将textColor设置为黑色。它们都很好,除了它创建的最后一个。那个将textColor更改为文本视图的backgroundColor,然后停止更新它的UI。
如果我检查GDB中有问题的textColor的值,它是黑色的,即使它没有以这种方式显示。然后我以编程方式更改它(按下一个按钮,遍历所有创建的文本视图并将textColors全部设置为紫色),它们都会更改,除了最后一个,其背景颜色与文本颜色相同。同样,当我在GDB中检查textColor的值时,它被设置为紫色,即使这没有反映在屏幕上。
WTF?!?!?!有任何想法吗?这可能只是一个错误吗?
这是我用来添加UITextViews
的代码。我之间有UILabel所以我可以得到居中的文本。
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 :(得分:1)
我用黑客修好了。我认为这是一个错误。
最初,我添加了一个UIView
,其中填充了我想要在UITextView后面的背景颜色。
但是,我发现滚动UITextView
也会将背景颜色更改为设置的颜色。
所以我在我的.h中添加了BOOL alreadyScrolled;
,在[self scrollLevelLabelsViews]
中添加了对viewDidAppear:
的调用(首先检查以确保它没有alreadyScrolled
因为viewDidAppear:
例如,如果出现模态视图,则可以多次调用,并添加以下方法来滚动视图。我也遇到了上一个文本视图无法正确显示文本的问题,但忽略创建它直到视图出现后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];
}
即使你没有遇到这个问题,这也只是一个很酷的效果,因为它让用户知道有更多的文字,他们看不到,文本视图是可滚动的。
答案 1 :(得分:0)
如何设置numberOfSections?
也许试试:
for (int i = 0; i <= numberOfSections; i++) {