UITextView / UITextField的虚线/虚线边框

时间:2012-05-30 09:05:03

标签: ios objective-c uitextfield uitextview border

我想为UITextFieldUITextView设置虚线/虚线边框

我该怎么做?我知道,我可以设置这行代码的边界:

[self.textFieldCardTitle.layer setBorderWidth:1.0];
[self.textFieldCardTitle.layer setBorderColor:[[UIColor whiteColor] CGColor]];  

注意:我已经有了在UIImageView后面添加UITextView并在那里设置带有虚线边框的图片的想法。但我不想那样解决。

4 个答案:

答案 0 :(得分:8)

例如,您可以尝试下一种方法:

1)创建代表边框的图像(例如:一个点和一个空格)

2)将图像添加到项目中。

3)设置边框(如问题中的代码所示)并使用pattern设置颜色:

[self.textFieldCardTitle.layer setBorderWidth:6.0];
[self.textFieldCardTitle.layer setBorderColor:[[UIColor colorWithPatternImage:[UIImage imageNamed:@"dashed_white.png"]] CGColor]];

当沿4个边(左,右,下,上)绘制边框时,应使用方形图像:例如,中间的像素为黑色,周围的像素为透明。因此,该图像的副本将放置在视图周围。

答案 1 :(得分:5)

只需使用以下代码围绕UIView UITextField的虚线/虚线边框或任何其他视图: -

CAShapeLayer * _border = [CAShapeLayer layer];
_border.strokeColor = [UIColor redColor].CGColor;
_border.fillColor = nil;
_border.lineDashPattern = @[@4, @2];
[YOURVIEW.layer addSublayer:_border];

//for a square effect
_border.path = [UIBezierPath bezierPathWithRect:YOURVIEW.bounds].CGPath;
//for a rounded effect
//_border.path = [UIBezierPath bezierPathWithRoundedRect:YOURVIEW.bounds cornerRadius:txtUserName.frame.size.height / 2].CGPath;

_border.frame = YOURVIEW.bounds;

有关详细信息,请参阅此Answer

希望,这就是你要找的东西。任何关注都会回复给我。 :)

答案 2 :(得分:4)

这是我用Swift做的事情:

self.textFieldCardTitle.layer.borderWidth = 3
self.textFieldCardTitle.layer.borderColor = (UIColor(patternImage: UIImage(named: "dot")!)).CGColor

免费奖金,我附上了下面的照片。除非StackOverflow更改其背景,否则您可能不会看到它们,因为它们是白色背景上的白色方块,因此您也可以找到下面的URL。

dot dot@2x dot@3x

答案 3 :(得分:0)

迅速5,了解@Meet Doshi的答案

class CustomTextField: UITextField{

   let dashBorder = CAShapeLayer()
    
    override init(frame: CGRect) {
        super.init(frame: .zero)
        
        dashBorder.strokeColor = UIColor.lightGray.cgColor
        dashBorder.fillColor = nil
        dashBorder.lineDashPattern = [4, 2]
        layer.addSublayer(dashBorder)
    
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        dashBorder.path = UIBezierPath(roundedRect: bounds, cornerRadius: 5).cgPath
        dashBorder.frame = bounds
    }

}