如何从以编程方式添加的文本字段中删除图层

时间:2015-02-09 02:02:42

标签: ios objective-c

我在

的文本字段中添加了一个图层(底部边框)
- (void) addBorderToTextField:(UITextField *)textField borderWidth:(CGFloat)borderWidth
{
    CALayer *border = [CALayer layer];
    border.borderColor = [UIColor darkGrayColor].CGColor;
    border.frame = CGRectMake(0, textField.frame.size.height - borderWidth, textField.frame.size.width, textField.frame.size.height);
    border.borderWidth = borderWidth;
    [textField.layer addSublayer:border];
    textField.layer.masksToBounds = YES;
}

现在我想以编程方式删除此边框

我在下面试过但它崩溃了。不确定最后一个对象是否包含所需的对象。

- (void) replaceBorderFromTextField:(UITextField *)textField borderWidth:(CGFloat)borderWidth
{
    CALayer *border = [CALayer layer];
    border.borderColor = [UIColor darkGrayColor].CGColor;
    border.frame = CGRectMake(0, textField.frame.size.height - borderWidth, textField.frame.size.width, textField.frame.size.height);
    border.borderWidth = borderWidth;
    NSArray *subLayers = [textField.layer sublayers];
    CALayer *existingBorder = [subLayers objectAtIndex:[subLayers count] -1];
    [textField.layer replaceSublayer:existingBorder with:border];
    textField.layer.masksToBounds = YES;
}

如何删除?

1 个答案:

答案 0 :(得分:0)

这是一个简单的识别问题。幸运的是,CALayer符合任意键的KVC标准。因此,您可以在setValue:forKey:图层上使用border创建它,例如,为其提供值为@"name"的{​​{1}}密钥。稍后,当需要将其删除时,您可以通过循环查找子@"border"valueForKey: @"name"的子图层来识别正确的图层。 (实际上,找到@"border"密钥不是@"name"的图层可能就足够了!)