我想在CALayer中添加一个文本字段,但我找不到等待它。
代码:
-(void)drawInContext:(CGContextRef)ctx
{
NSLog(@"OK");
UITextField *field = [[UITextField alloc] initWithFrame:CGRectMake(0,120, self.frame.size.width, 100)];
[field setText:@"Test"];
[self addSublayer:field.layer];
}
任何想法,建议,良好的实践:)?
答案 0 :(得分:0)
你无法设法将UITextField(它是UIView的子类)作为CALayer的子(子层)放置,它需要一个具有CALayer祖先的对象。
但是你当然可以找到CALayer的超级视图,它继承了UIView并将UITextField置于显示时间的好位置,并将CALayer设置为UITextField的委托,以便在键入时保持内容同步(请参阅UITextFieldTextDidChangeNotification通知或-textFieldDidEndEditing:UITextField中的委托方法)。
以下是它在Quartz Composer中的表现(使用Cocoa,而不是Cocoa Touch)
答案 1 :(得分:0)
良好的实践:)?
在我看来,这是一种不好的做法。图层比视图低,你不应该像这样混合它们。这样做,如in this question所示,可能会产生你没想到的后果/副作用。
您应该更高级别并跳过图层构思,只需将UITextView放入视图或全部降低级别并将CATextLayer放入图层。请注意,CATextLayer仅用于绘图,而不用于编辑。如果您需要UITextField的行为,包括能够成为第一个响应者(即支持键盘输入),那么更好的解决方案是坚持视图。
作为旁注:地点将视图添加到图层中非常糟糕练习。 drawing 应使用drawInContext:
和drawRect:
等绘图方法。这些方法可能被多次调用,在这种情况下,最终会有许多视图/层被添加到彼此之上。