UITextField中的白色文本= iPhone复制/粘贴选择中的不可见文本。固定?

时间:2009-12-24 19:41:03

标签: iphone iphone-sdk-3.0

如果我的UITextField中有白色文本,则选择窗口(选择文本时)是不可见的,因为小窗口上的背景也是白色的。

有什么方法可以解决这个问题吗?

5 个答案:

答案 0 :(得分:4)

当然!放大镜的背景颜色始终与文本字段的backgroundColor属性匹配。 (但不是background属性。)示例:

textField.textColor = [UIColor whiteColor];
textField.backgroundColor = [UIColor blackColor];

如果您的文字字段绝对需要透明背景,则您必须使用包含文本字段下方图形的背景图片来伪造它。您可以手动执行此操作 - 通过获取界面的屏幕截图并进行裁剪或以编程方式进行裁剪,如下所示:

#import <QuartzCore/CALayer.h>
...
// `view` contains the graphics underneath the text field
UIGraphicsBeginImageContext(textField.bounds.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGPoint origin = [textField convertPoint:textField.bounds.origin toView:view];
CGContextTranslateCTM(context, -origin.x, -origin.y);
[view.layer renderInContext:context];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
textField.background = image;

由于背景是在背景颜色之上绘制的,因此文本字段将显示为透明,并且您将能够使用所需的任何背景颜色放大镜。

答案 1 :(得分:1)

我不敢。这个问题从iPhone OS白色文本的早期出现,在光标定位放大镜中也显示为白底白字。如果这对您的应用程序来说是个严重问题,那么您唯一真正的选择就是更改文本颜色或向Apple提交雷达功能请求。

答案 2 :(得分:1)

Glass从textView.backgroundColor获取颜色。所以我做了一些非常糟糕的黑客攻击:

@interface FakeBgTextView : UITextView {
    UIColor *_fakeBackgroundColor;
}

- (UIColor *)backgroundColor;
- (void)setFakeBackgroundColor:(UIColor *)color;
@end

@implementation FakeBgTextView
...
- (UIColor *)backgroundColor {
    return _fakeBackgroundColor;
}

- (void)setFakeBackgroundColor:(UIColor *)color {
    [_fakeBackgroundColor release];
    _fakeBackgroundColor = [color retain];
}
...
@end

答案 3 :(得分:1)

我知道这有点旧,但在iOS5中,它似乎只是一个模拟器问题。它将在设备上正确呈现。

答案 4 :(得分:0)

我为此问题采用的一种解决方案是将文本颜色更改为将在放大镜中显示的颜色(但在整体视图中可能看起来不太好),同时编辑然后将其更改回更好完成编辑后显示颜色。

它表现得就像从视觉角度突出显示字段文本一样,并允许您在不编辑时使用首选颜色显示输入的数据。

将颜色设置为高亮颜色,在didBeginEditing的放大镜中具有足够的对比度,然后在didEndEditing上将其更改回来。

只是另一种可能的方法,我在几个应用程序中使用过。

例如。

- (void)textFieldDidBeginEditing:(UITextField *)textField {
  textField.textColor = [UIColor colorWithRed:116.0/255.0 green:160.0/255.0 blue:246.0/255.0 alpha:1.0];
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
  textField.textColor = [UIColor colorWithRed:224.0/255.0 green:224.0/255.0 blue:224.0/255.0 alpha:1.0];
}