UITextView с границей


127

Я хочу, чтобы вокруг файла UITextView. Я просмотрел документацию Apple, но не нашел там никакой собственности. Пожалуйста помоги.

Ответы:


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
Я не думал, что это действительно нужно много объяснять, представление - это UITextView, а код идет туда, где вы настраиваете представление (awakeFromNib или viewDidLoad - два возможных места). Поскольку не было предоставлено никакого кода, нет возможности дать хороший ответ в ответ.
Кендалл Хельмштеттер Гельнер,

XCode не позволяет мне устанавливать границу для слоя. Он говорит, что слой доступен только для чтения. Я сделал UIView (где поместил некоторые элементы) и попытался установить границу для этого представления. Пытаюсь сделать это self.myView.layer.borderWidth ..., но, как я уже сказал, слой
доступен

2
Вы импортировали QuartzCore? Вы также можете попробовать получить CALayer из self.myView и установить для него borderWidth. Это настраивается.
Кендалл Хельмштеттер Гельнер

Дополнительная информация о том, что «слой» доступен только для чтения в UIView (свойство слоя есть, но вы можете установить значения в слое для представления): stackoverflow.com/questions/12837077/…
Кендалл Хельмстеттер Гелнер,

42

Добавьте следующее для закругленных углов:

self.yourUITextview.layer.cornerRadius = 8; 

23

Вот код, который я использовал, чтобы добавить границу вокруг моего TextViewэлемента управления с именем «tbComments»:

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

А вот как это выглядит:

введите описание изображения здесь

Очень просто.


19

Я добавляю UIImageViewкак подвид UITextView. Это соответствует собственной границе на a UITextField, включая градиент сверху вниз:

введите описание изображения здесь

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];

Это изображения png, которые я использую, и представление jpg:

@ 1x

@ 2x

введите описание изображения здесь


Хорошее решение. Эти изображения твои? Можем ли мы их использовать?
Джеймс Вебстер,

Эти изображения «смоделированы» на основе изображений, используемых в собственных приложениях Apple. По правде говоря, я извлек их и внес очень мало изменений, если вообще внес их. Используйте на свой риск. Цель заключалась в том, чтобы имитировать естественный внешний вид, поэтому трудно придумать что-то, что выглядело бы иначе. Чего бы это ни стоило, я без проблем отправил и получил одобренные приложения, использующие этот образ.
Бен Паккард

Файлы изображений png, похоже, были удалены - я не собираюсь постоянно обновлять их, добавляя новое расположение изображения, поэтому приношу свои извинения, если jpg не работает для вас. Я могу повторно загрузить, как и когда будет запрошено через комментарий.
Бен Паккард

3
С прикрепленным изображением это работает лучше всего: coderesizableImageWithCapInsets: UIEdgeInsetsMake (28, 14, 28, 14)
RefuX

Ссылки WikiUpload (для двух изображений) теперь не могут найти файлы изображений. ;-(
Майк Гледхилл

18

Отлично работает, но цвет должен быть а CGColor, а не UIColor:

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

4
#import <QuartzCore / QuartzCore.h>
kolinko 03

6

Я считаю, что приведенные выше ответы относятся к предыдущим версиям Swift. Я немного погуглил, и приведенный ниже код работает для Swift 4. Просто поделитесь им для тех, кому это может быть полезно.

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

Удачного кодирования!


С Swift5 и темным режимом вы даже можете использовать системные цвета:self.textViewName.layer.borderColor = UIColor.systemGray4.cgColor
multumes

4

для быстрого программирования используйте это

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

Или простоUIColor(white: 0.2, alpha: 1).CGColor
Лев

3

это как можно ближе к исходному UITextField

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

вы можете добавить границу в UITextView из раскадровки - Инспектор идентичности - Пользовательский атрибут времени выполнения

введите описание изображения здесь


0

Что касается iOS 8 и Xcode 6, я теперь считаю, что лучшим решением является создание подкласса UITextView и пометка подкласса как IB_DESIGNABLE, что позволит вам просматривать границу в раскадровке.

Заголовок:

#import <UIKit/UIKit.h>

IB_DESIGNABLE

@interface BorderTextView : UITextView

@end

Реализация:

#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

Затем просто перетащите свой UITextView в раскадровку и установите для него класс BorderTextView.


0

То, что заставило его работать (в дополнение к приведенным здесь ответам), - это добавление borderStyleатрибута:

#import <QuartzCore/QuartzCore.h>
..

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

0

Просто небольшое дополнение. Если вы сделаете границу немного шире, она будет мешать левой и правой стороне текста. Чтобы этого избежать, я добавил следующую строку:

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

0

В Swift 3 вы можете использовать следующие две строки:

myText.layer.borderColor = UIColor.lightGray.cgColor

myText.layer.borderWidth = 1.0

-3

Я решил эту проблему в раскадровке, поставив полностью отключена UIButtonпозади UITextViewи сделать цвет фона UITextViewclearColor. Это работает без дополнительного кода или пакетов.


3
Конечно, в iOS 7 это не работает, так как кнопки не имеют краев (теперь кнопки выглядят как ярлыки)
Майк Гледхилл,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.