UITextView Berbatasan

127

Saya ingin memiliki perbatasan abu-abu tipis di sekitar UITextView. Saya telah memeriksa dokumentasi Apple tetapi tidak dapat menemukan properti apa pun di sana. Tolong bantu.

Ali
sumber

Jawaban:

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];
Kendall Helmstetter Gelner
sumber
62
Saya tidak berpikir itu benar-benar perlu banyak penjelasan, tampilan adalah UITextView, dan kode pergi ke mana pun Anda mengatur tampilan (awakeFromNib atau viewDidLoad adalah dua tempat yang memungkinkan). Karena tidak ada kode yang diberikan, tidak ada cara untuk memberikan konteks yang baik sebagai tanggapan.
Kendall Helmstetter Gelner
XCode jangan biarkan saya mengatur batas untuk lapisan. Dikatakan bahwa lapisan itu hanya-baca. Saya membuat UIView (di mana meletakkan beberapa elemen) dan mencoba mengatur perbatasan ke tampilan itu. Mencoba melakukan ini self.myView.layer.borderWidth ..., tetapi seperti yang saya katakan, lapisan hanya-baca, jadi lapisan tidak memiliki metode atau variabel untuk disetel
Paulius Vindzigelskis
2
Apakah Anda mengimpor QuartzCore? Anda juga dapat mencoba mengeluarkan CALayer dari self.myView dan menyetel borderWidth padanya. Ini bisa diatur.
Kendall Helmstetter Gelner
Beberapa informasi lebih lanjut tentang "lapisan" menjadi hanya-baca di UIView (properti lapisan adalah, tetapi Anda dapat menyetel nilai di lapisan untuk tampilan): stackoverflow.com/questions/12837077/…
Kendall Helmstetter Gelner
42

Tambahkan berikut ini untuk sudut membulat:

self.yourUITextview.layer.cornerRadius = 8; 
pengguna542584
sumber
23

Berikut kode yang saya gunakan, untuk menambahkan batas di sekitar TextViewkontrol saya bernama "tbComments":

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

Dan inilah tampilannya:

masukkan deskripsi gambar di sini

Sangat mudah.

Mike Gledhill
sumber
19

Saya tambahkan UIImageViewsebagai subview dari UITextView. Ini cocok dengan batas asli di a UITextField, termasuk gradien dari atas ke bawah:

masukkan deskripsi gambar di sini

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

Ini adalah gambar png yang saya gunakan, dan representasi jpg:

@ 1x

@ 2x

masukkan deskripsi gambar di sini

Ben Packard
sumber
Solusi bagus. Apakah gambar-gambar ini milik Anda? Apakah kita bebas menggunakannya?
James Webster
Gambar-gambar ini 'dimodelkan' dari gambar yang digunakan di aplikasi Apple sendiri. Sebenarnya saya mengekstraknya dan membuat sangat sedikit, jika ada, perubahan. Gunakan dengan resiko Anda sendiri. Tujuannya adalah untuk meniru tampilan dan nuansa asli sehingga sulit untuk menghasilkan sesuatu yang terlihat jauh berbeda. Untuk apa nilainya, saya telah mengirim dan telah menyetujui aplikasi menggunakan gambar ini tanpa masalah.
Ben Packard
File gambar png tampaknya telah dihapus - Saya tidak bermaksud untuk terus memperbaruinya dengan lokasi gambar baru, jadi saya mohon maaf jika jpg tidak berfungsi untuk Anda. Saya dapat mengunggah ulang jika diminta melalui komentar.
Ben Packard
3
Dengan gambar terlampir, ini berfungsi paling baik: coderesizableImageWithCapInsets: UIEdgeInsetsMake (28, 14, 28, 14)
RefuX
Tautan WikiUpload (untuk dua gambar) gagal menemukan file gambar sekarang. ;-(
Mike Gledhill
18

Berfungsi bagus, tetapi warnanya harus a CGColor, bukan UIColor:

view.layer.borderWidth = 5.0f;
view.layer.borderColor = [[UIColor grayColor] CGColor];
Matt Connolly
sumber
4
#import <QuartzCore / QuartzCore.h>
kolinko
6

Saya yakin jawaban di atas adalah untuk versi Swift sebelumnya. Saya mencari di Google sedikit dan kode di bawah ini berfungsi untuk Swift 4. Hanya membagikannya untuk siapa pun yang dapat memperoleh manfaat.

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

Selamat Coding!

IronmanX46
sumber
Dengan Swift5 dan mode gelap, Anda bahkan dapat menggunakan warna sistem:self.textViewName.layer.borderColor = UIColor.systemGray4.cgColor
banyak orang
4

untuk Pemrograman Swift, gunakan ini

tv_comment.layer.borderWidth = 2
tv_comment.layer.borderColor = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1).CGColor
Buah A.Suk
sumber
Atau hanyaUIColor(white: 0.2, alpha: 1).CGColor
Leo
3

ini sedekat yang saya bisa dari UITextField asli

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
}
Matias Elorriaga
sumber
1

Anda dapat menambahkan batas ke UITextView dari Storyboard - Identity Inspector - Atribut Waktu Proses yang Ditentukan Pengguna

masukkan deskripsi gambar di sini

Dan Alboteanu
sumber
0

Mulai iOS 8 dan Xcode 6, saya sekarang menemukan solusi terbaik adalah subclass UITextView dan menandai subclass sebagai IB_DESIGNABLE, yang akan memungkinkan Anda untuk melihat perbatasan di storyboard.

Tajuk:

#import <UIKit/UIKit.h>

IB_DESIGNABLE

@interface BorderTextView : UITextView

@end

Penerapan:

#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

Kemudian tarik keluar UITextView Anda di storyboard dan setel kelasnya ke BorderTextView

mike
sumber
0

Hal yang membuatnya berhasil (selain mengikuti jawaban di sini) adalah menambahkan borderStyleatribut:

#import <QuartzCore/QuartzCore.h>
..

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

Hanya sedikit tambahan. Jika Anda membuat batas sedikit lebih lebar, itu akan mengganggu sisi kiri dan kanan teks. Untuk menghindarinya, saya menambahkan baris berikut:

self.someTextView.textContainerInset = UIEdgeInsetsMake(8.0, 8.0, 8.0, 8.0);
Sloba
sumber
0

Di Swift 3, Anda dapat menggunakan dua baris berikut:

myText.layer.borderColor = UIColor.lightGray.cgColor

myText.layer.borderWidth = 1.0
Amr Marah
sumber
-3

Saya memecahkan masalah ini di storyboard dengan menempatkan sepenuhnya dinonaktifkan di UIButtonbelakang UITextViewdan membuat warna latar belakang UITextViewclearColor. Ini berfungsi tanpa memerlukan kode atau paket tambahan.

Brandon
sumber
3
Tentu saja, ini tidak berfungsi di iOS 7, karena tombol tidak memiliki tepi (tombol terlihat seperti label sekarang)
Mike Gledhill