2015-02-09 26 views
0

我加了層(底部邊框)與如何從其中添加文本框除去層編程

- (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; 
} 

我該如何刪除?

+0

我試過了你的代碼。工作得很好。你的bug msut是別的地方。如果可以的話,還請發佈有關如何調用這兩個函數的相關代碼。 – 2015-02-09 03:28:12

+0

我在子數組中有兩個元素...不知道哪兩個...我使用了matt下面提供的方法,它的工作原理....我相信在你的測試中,你只有1個元素在子數組中,因此它工作 – GJain 2015-02-09 04:35:14

回答

0

這是一個簡單的識別問題。幸運的是,CALayer對於任意鍵都符合KVC標準。因此,您可以在border圖層上使用setValue:forKey:,創建該圖層時,可以使用@"name"密鑰(其值爲@"border")。之後,當需要刪除它時,可以通過循環查找其中的valueForKey:(其@"name"鍵爲@"border")的子層來識別正確的圖層。 (實際上它可能足以找到其@"name"密鑰不是nil以外的任何圖層!)

相關問題