Обмежений 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 ..., але, як я вже сказав, шар доступний лише для читання, тому в шарі немає встановлених методів чи змінних
Paulius Vindzigelskis

2
Ви імпортували QuartzCore? Ви також можете спробувати вийти з CALayer з self.myView і встановити на цьому borderWidth. Це встановлено.
Кендалл Гельмстетер Гельнер

Ще трохи інформації про те, що "шар" читається лише в UIView (властивість шару є, але ви можете встановити значення в шарі для перегляду): stackoverflow.com/questions/12837077/…
Kendall Helmstetter Gelner


23

Ось код, який я використав, щоб додати межу навколо мого TextViewелемента управління під назвою "tbComments":

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

А ось як це виглядає:

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

Простенька.


19

Я додаю UIImageViewяк підвід UITextView. Це відповідає рідній межі а 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];

Це зображення, які я використовую, та зображення у форматі jpg:

@ 1x

@ 2x

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


Гарне рішення. Ці образи ваші? Чи ми можемо ними користуватися?
Джеймс Вебстер

Ці зображення "моделюються" на зображеннях у власних додатках Apple. По правді кажучи, я витягнув їх і вніс дуже мало, якщо такі були, зміни. Використовуйте на свій страх і ризик. Мета полягала в тому, щоб імітувати рідний вигляд і відчуття, тому важко придумати щось, що виглядає набагато інакше. Для чого це варто, я без проблем поставляв і схвалював програми, використовуючи це зображення.
Бен Пакард

Файли зображень у форматі png видалено - я не збираюся постійно оновлювати це новим розташуванням зображення, тому мої вибачення, якщо jpg не працює для вас. Я можу повторно завантажувати як і коли це вимагається через коментар.
Бен Пакард

3
З доданим зображенням це найкраще працює code: resizableImageWithCapInsets: 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

6

Я вважаю, що наведені вище відповіді стосуються попередніх версій Swift. Я трохи погукав Google, і наведений нижче код працює для 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
натовпи народу

4

для програмування Swift використовуйте це

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.