编辑

时间:2015-07-01 08:41:02

标签: ios

我需要为编辑模式执行自定义字段数据突出显示:当用户点击该字段时,我们在整个屏幕上设置覆盖率为alpha 0.5,但显示该覆盖图上方的字段值。因此,看起来我们强调字段的文本值,并将所有其他内容放到屏幕上。

目前我只有一个想法如何做到这一点:

  1. 获取该字段的绝对坐标(实际上它是表格单元格内的自定义控件)。
  2. 将具有alpha 0.5的新叠加视图添加到当前视图控制器的视图中。这将屏幕上的所有内容都放到了背景中。
  3. 使用与步骤1中的字段相同的边界创建新的形状图层,并将此图层添加为覆盖视图的蒙版。这将在叠加层中执行“窗口”,我们的字段将不受alpha值的影响。
  4. 这个解决方案的唯一问题是在“窗口”内部,我们不仅有文本,还有像背景这样的其他东西。

    那么也许这种叠加的另一种解决方案是只有叠加的文本值?

    更新

    我提出了以下解决方案:在叠加视图内的图像视图中显示字段(快照)的图像。它易于实现,对这么小的区域进行快照不会影响性能。

1 个答案:

答案 0 :(得分:0)

将您的uitextfield子类化并订阅此通知:

UITextFieldTextDidBeginEditingNotification
UITextFieldTextDidChangeNotification
UITextFieldTextDidEndEditingNotification

然后添加重叠uiview作为你的uiwindow子视图

UIView* myView = /* Your custom view */;
UIWindow* currentWindow = [UIApplication sharedApplication].keyWindow;
[currentWindow addSubview:myView];

覆盖此自定义视图的drawRectFunc,其中maskRect - 文本框架的框架(必须转换为uiwindow坐标)

- (void)drawRect:(CGRect)rect
{
// Drawing code
CGRect rBounds = self.bounds;

CGContextRef context = UIGraphicsGetCurrentContext();

// Fill background with 80% white
CGContextSetFillColorWithColor(context, [[[UIColor whiteColor] colorWithAlphaComponent:0.8] CGColor]);
CGContextFillRect(context, rBounds);

// make the window transparent
CGContextSetBlendMode(context, kCGBlendModeClear);
CGContextFillRect(context, self.maskRect);
}

希望这会有所帮助