Biên giới UITextView


127

Tôi muốn có một đường viền màu xám mỏng xung quanh a UITextView. Tôi đã xem qua tài liệu của Apple nhưng không thể tìm thấy bất kỳ tài sản nào ở đó. Xin vui lòng giúp đỡ.

Câu trả lời:


306
#import <QuartzCore/QuartzCore.h>

....

// typically inside of the -(void) viewDidLoad method
self.yourUITextView.layer.borderWidth = 5.0f;
self.yourUITextView.layer.borderColor = [[UIColor grayColor] CGColor];

62
Tôi không nghĩ rằng nó thực sự cần giải thích nhiều, chế độ xem là UITextView và mã đi bất cứ nơi nào bạn thiết lập chế độ xem (awakeFromNib hoặc viewDidLoad là hai vị trí có thể). Vì không có mã nào được đưa ra nên không có cách nào để đưa ra bối cảnh tốt để đáp lại.
Kendall Helmstetter Gelner

XCode không cho phép tôi đặt đường viền cho lớp. Nó nói rằng lớp chỉ đọc. Tôi đã tạo UIView (nơi đặt một số yếu tố) và cố gắng đặt đường viền cho chế độ xem đó. Cố gắng làm điều này self.myView.layer.borderWidth ..., nhưng như tôi đã nói, lớp chỉ đọc, vì vậy lớp không có bất kỳ phương thức hoặc biến nào để đặt
Paulius Vindzigelskis

2
Bạn đã nhập QuartzCore? Bạn cũng có thể thử lấy ra một CALayer từ self.myView và đặt BorderWidth trên đó. Nó ổn định.
Kendall Helmstetter Gelner

Một số thông tin khác về "lớp" chỉ đọc trong UIView (thuộc tính lớp là, nhưng bạn có thể đặt giá trị trong lớp để xem): stackoverflow.com/questions/12837077/iêu
Kendall Helmstetter Gelner


23

Đây là mã tôi đã sử dụng, để thêm đường viền xung quanh TextViewđiều khiển của tôi có tên là "tbComments":

self.tbComments.layer.borderColor = [[UIColor grayColor] CGColor];
self.tbComments.layer.borderWidth = 1.0;
self.tbComments.layer.cornerRadius = 8;

Và đây là những gì nó trông giống như:

nhập mô tả hình ảnh ở đây

Dễ như ăn bánh.


19

Tôi thêm UIImageViewnhư là một subview của UITextView. Điều này khớp với đường viền gốc trên a UITextField, bao gồm cả gradient từ trên xuống dưới:

nhập mô tả hình ảnh ở đây

textView.backgroundColor = [UIColor clearColor];
UIImageView *borderView = [[UIImageView alloc] initWithFrame: CGRectMake(0, 0, textView.frame.size.width, textView.frame.size.height)];
borderView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
UIImage *textFieldImage = [[UIImage imageNamed:@"TextField.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(15, 8, 15, 8)];
borderView.image = textFieldImage;
[textField addSubview: borderView];
[textField sendSubviewToBack: borderView];

Đây là những hình ảnh png tôi sử dụng và đại diện jpg:

@ 1x

@ 2 lần

nhập mô tả hình ảnh ở đây


Giải pháp tốt. Là những hình ảnh của bạn? Chúng ta có tự do sử dụng chúng không?
James Webster

Những hình ảnh này được 'mô hình hóa' trên những hình ảnh được sử dụng trong các ứng dụng riêng của Apple. Trong thực tế, tôi đã trích xuất chúng và thực hiện rất ít, nếu có, thay đổi. Sử dụng có nguy cơ của riêng bạn. Mục đích là bắt chước giao diện bản địa và cảm giác thật khó để tìm ra thứ gì đó trông khác biệt nhiều. Đối với những gì nó có giá trị, tôi đã vận chuyển và có các ứng dụng được phê duyệt sử dụng hình ảnh này mà không có vấn đề.
Ben Packard

Các tệp hình ảnh png dường như đã bị xóa - Tôi không có ý định cập nhật liên tục điều này với một vị trí hình ảnh mới để tôi xin lỗi nếu jpg không hoạt động với bạn. Tôi có thể tải lên lại khi và khi được yêu cầu thông qua nhận xét.
Ben Packard

3
Với hình ảnh được đính kèm, công việc này hoạt động tốt nhất: coderesizableImageWithCapInsets: UIEdgeInsetsMake (28, 14, 28, 14)
RefuX

Liên kết WikiUpload (cho hai hình ảnh) không thể tìm thấy các tệp hình ảnh bây giờ. ;-(
Mike Gledhill

18

Hoạt động tuyệt vời, nhưng màu sắc nên là một CGColor, không phải UIColor:

view.layer.borderWidth = 5.0f;
view.layer.borderColor = [[UIColor grayColor] CGColor];

4
#import <QuartzCore / QuartzCore.h>
kolinko

6

Tôi tin rằng các câu trả lời trên là dành cho các phiên bản trước của Swift. Tôi đã googled một chút và đoạn mã dưới đây hoạt động cho Swift 4. Chỉ cần chia sẻ nó cho bất cứ ai nó có thể có lợi.

self.textViewName.layer.borderColor = UIColor.lightGray.cgColor
self.textViewName.layer.borderWidth = 1.0
self.textViewName.layer.cornerRadius = 8

Chúc mừng mã hóa!


Với Swift5 và chế độ tối, bạn thậm chí có thể sử dụng màu hệ thống:self.textViewName.layer.borderColor = UIColor.systemGray4.cgColor
đa dạng

4

để lập trình Swift, hãy sử dụng cái này

tv_comment.layer.borderWidth = 2
tv_comment.layer.borderColor = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1).CGColor

Hoặc chỉUIColor(white: 0.2, alpha: 1).CGColor
Leo

3

nó gần nhất có thể từ một UITextField ban đầu

func updateBodyTextViewUI() {
    let borderColor = UIColor.init(red: 212/255, green: 212/255, blue: 212/255, alpha: 0.5)

    self.bodyTextView.layer.borderColor = borderColor.CGColor
    self.bodyTextView.layer.borderWidth = 0.8
    self.bodyTextView.layer.cornerRadius = 5
}

1

bạn có thể thêm đường viền vào UITextView từ Storyboard - Trình kiểm tra danh tính - Thuộc tính thời gian chạy do người dùng xác định

nhập mô tả hình ảnh ở đây


0

Kể từ iOS 8 và Xcode 6, bây giờ tôi thấy giải pháp tốt nhất là phân lớp UITextView và đánh dấu lớp con là IB_DESIGNABLE, cho phép bạn xem đường viền trong bảng phân cảnh.

Tiêu đề:

#import <UIKit/UIKit.h>

IB_DESIGNABLE

@interface BorderTextView : UITextView

@end

Thực hiện:

#import "BorderTextView.h"

@implementation BorderTextView

- (void)drawRect:(CGRect)rect
{
    self.layer.borderWidth = 1.0;
    self.layer.borderColor = [UIColor blackColor].CGColor;
    self.layer.cornerRadius = 5.0f;
}

@end

Sau đó, chỉ cần kéo UITextView của bạn trong bảng phân cảnh và đặt lớp của nó thành BorderTextView


0

Điều làm cho nó hoạt động (ngoài việc làm theo các câu trả lời ở đây) là thêm borderStylethuộc tính:

#import <QuartzCore/QuartzCore.h>
..

phoneTextField.layer.borderWidth = 1.0f;
phoneTextField.layer.borderColor = [[UIColor blueColor] CGColor];
phoneTextField.borderStyle = UITextBorderStyleNone;

0

Chỉ là một bổ sung nhỏ. Nếu bạn làm cho đường viền rộng hơn một chút, nó sẽ can thiệp vào bên trái và bên phải của văn bản. Để tránh điều đó, tôi đã thêm dòng sau:

self.someTextView.textContainerInset = UIEdgeInsetsMake(8.0, 8.0, 8.0, 8.0);

0

Trong Swift 3, bạn có thể sử dụng hai dòng sau:

myText.layer.borderColor = UIColor.lightGray.cgColor

myText.layer.borderWidth = 1.0

-3

Tôi đã giải quyết vấn đề này trong bảng phân cảnh bằng cách đặt một khuyết tật hoàn toàn UIButtonphía sau UITextViewvà tạo màu nền của UITextViewClearColor. Điều này hoạt động mà không yêu cầu thêm mã hoặc gói.


3
Tất nhiên, điều này không hoạt động trong iOS 7, vì các nút không có cạnh (các nút trông giống như nhãn bây giờ)
Mike Gledhill
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.