UITextView ที่มีขอบ


127

ฉันต้องการมีขอบสีเทาบาง ๆ รอบ ๆ a 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 เป็นไปได้สองที่) เนื่องจากไม่มีรหัสที่ระบุจึงไม่มีวิธีใดที่จะให้บริบทที่ดีในการตอบสนอง
Kendall Helmstetter Gelner

XCode อย่าให้ฉันกำหนดเส้นขอบสำหรับเลเยอร์ มันบอกว่าเลเยอร์เป็นแบบอ่านอย่างเดียว ฉันสร้าง UIView (ที่ใส่องค์ประกอบบางอย่าง) และพยายามกำหนดเส้นขอบให้กับมุมมองนั้น พยายามทำสิ่งนี้self.myView.layer.borderWidth ...แต่อย่างที่บอกว่าเลเยอร์เป็นแบบอ่านอย่างเดียวดังนั้นเลเยอร์จึงไม่มีวิธีการหรือตัวแปรให้ตั้งค่า
Paulius Vindzigelskis

2
คุณนำเข้า QuartzCore หรือไม่ คุณสามารถลองใช้ CALayer จาก self.myView และตั้งค่า borderWidth ได้ มันสามารถตั้งค่าได้
Kendall Helmstetter Gelner

ข้อมูลเพิ่มเติมเกี่ยวกับ "เลเยอร์" เป็นแบบอ่านอย่างเดียวใน 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;

และนี่คือสิ่งที่ดูเหมือน:

ใส่คำอธิบายภาพที่นี่

peasy ง่าย


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

ใส่คำอธิบายภาพที่นี่


ทางออกที่ดี. ภาพเหล่านี้เป็นของคุณหรือไม่? เรามีอิสระที่จะใช้หรือไม่
James Webster

รูปภาพเหล่านี้ถูก 'จำลอง' จากที่ใช้ในแอพของ Apple เอง ความจริงฉันแยกมันออกมาและทำการเปลี่ยนแปลงน้อยมาก (ถ้ามี) ใช้ด้วยความเสี่ยงของคุณเอง เป้าหมายคือการเลียนแบบรูปลักษณ์พื้นเมืองดังนั้นจึงยากที่จะสร้างสิ่งที่ดูแตกต่างออกไปมาก สำหรับสิ่งที่คุ้มค่าฉันได้จัดส่งและได้รับการอนุมัติแอปโดยใช้รูปภาพนี้โดยไม่มีปัญหา
Ben Packard

ดูเหมือนว่าไฟล์ภาพ png จะถูกลบ - ฉันไม่ได้ตั้งใจที่จะอัปเดตสิ่งนี้ด้วยตำแหน่งรูปภาพใหม่อย่างต่อเนื่องดังนั้นฉันต้องขออภัยหาก jpg ไม่ได้ผลสำหรับคุณ ฉันสามารถอัปโหลดใหม่ตามและเมื่อได้รับการร้องขอผ่านความคิดเห็น
Ben Packard

3
เมื่อแนบรูปภาพสิ่งนี้จะทำงานได้ดีที่สุด: coderesizableImageWithCapInsets: UIEdgeInsetsMake (28, 14, 28, 14)
RefuX

ลิงก์ WikiUpload (สำหรับสองภาพ) ไม่พบไฟล์ภาพในขณะนี้ ;-(
Mike Gledhill

18

ใช้งานได้ดี แต่สีควรเป็น a CGColorไม่ใช่UIColor:

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

4
#import <QuartzCore / QuartzCore.h>
kolinko

6

ฉันเชื่อว่าคำตอบข้างต้นมีไว้สำหรับ Swift เวอร์ชันก่อนหน้า ฉัน Googled เล็กน้อยและโค้ดด้านล่างใช้ได้กับ Swift 4 เพียงแค่แบ่งปันเพื่อใครก็ตามที่อาจได้รับประโยชน์

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

Happy Coding!


ด้วย Swift5 และโหมดมืดคุณยังสามารถใช้สีของระบบ:self.textViewName.layer.borderColor = UIColor.systemGray4.cgColor
จำนวนมาก

4

สำหรับ Swift Programming ให้ใช้สิ่งนี้

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
}


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 เนื่องจากปุ่มต่างๆไม่มีขอบ (ตอนนี้ปุ่มดูเหมือนป้ายกำกับ)
Mike Gledhill
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.