ฉันกำลังพัฒนาแอปพลิเคชันที่ผู้ใช้ต้องเขียนข้อมูลบางอย่าง เพื่อจุดประสงค์นี้ฉันต้องการUITextField
ซึ่งเป็นหลายบรรทัด (โดยทั่วไปUITextField
คือบรรทัดเดียว)
ในขณะที่ฉันกำลังค้นหาฉันพบคำตอบของการใช้งานUITextView
แทนUITextfield
จุดประสงค์นี้
ฉันกำลังพัฒนาแอปพลิเคชันที่ผู้ใช้ต้องเขียนข้อมูลบางอย่าง เพื่อจุดประสงค์นี้ฉันต้องการUITextField
ซึ่งเป็นหลายบรรทัด (โดยทั่วไปUITextField
คือบรรทัดเดียว)
ในขณะที่ฉันกำลังค้นหาฉันพบคำตอบของการใช้งานUITextView
แทนUITextfield
จุดประสงค์นี้
คำตอบ:
UITextField
โดยเฉพาะหนึ่งบรรทัดเท่านั้น
การค้นหา Google ของคุณถูกต้องคุณต้องใช้UITextView
แทนUITextField
การแสดงและแก้ไขข้อความหลายบรรทัด
ในตัวสร้างส่วนต่อขยายเพิ่มUITextView
ตำแหน่งที่คุณต้องการและเลือกกล่อง "แก้ไขได้" มันจะเป็น multiline โดยค่าเริ่มต้น
คุณสามารถปลอม UITextField โดยใช้ UITextView ปัญหาที่คุณมีคือคุณสูญเสียฟังก์ชันการทำงานของตัวยึดตำแหน่ง
หากคุณเลือกที่จะใช้ UITextView และต้องการตัวยึดตำแหน่งให้ทำสิ่งนี้:
ใน viewDidLoad ของคุณให้ตั้งค่าสีและข้อความเป็นตัวยึดตำแหน่ง:
myTxtView.textColor = .lightGray
myTxtView.text = "Type your thoughts here..."
จากนั้นทำให้ตัวยึดตำแหน่งหายไปเมื่อคุณเลือก UITextView:
func textViewDidBeginEditing (textView: UITextView) {
if myTxtView.textColor.textColor == ph_TextColor && myTxtView.isFirstResponder() {
myTxtView.text = nil
myTxtView.textColor = .white
}
}
เมื่อผู้ใช้เสร็จสิ้นการแก้ไขตรวจสอบให้แน่ใจว่ามีค่า หากไม่มีให้เพิ่มตัวยึดตำแหน่งอีกครั้ง:
func textViewDidEndEditing (textView: UITextView) {
if myTxtView.text.isEmpty || myTxtView.text == "" {
myTxtView.textColor = .lightGray
myTxtView.text = "Type your thoughts here..."
}
}
คุณสมบัติอื่น ๆ ที่คุณอาจจำเป็นต้องใช้ในการปลอม:
UITextField มักใช้ประโยชน์จากตัวอักษรทุกตัวคุณสามารถเพิ่มคุณสมบัตินั้นใน UITableView:
myTxtView.autocapitalizationType = .words
UITextField มักจะไม่เลื่อน:
myTxtView.scrollEnabled = false
ตกลงฉันทำมันด้วยเคล็ดลับ;) ก่อนสร้างUITextField
และเพิ่มมันเป็นsize
เช่นนี้:
CGRect frameRect = textField.frame;
frameRect.size.height = 53;
textField.frame = frameRect;
จากนั้นสร้างUITextView
ว่าในพื้นที่เดียวกันกับที่มึงทำของฉันและลบของมันUITextField
background color
ตอนนี้ดูเหมือนว่าคุณจะมีหลายบรรทัดTextField
!
UITextView
นี้จะสร้าง จุดของการมี UITextField UITextView
คือว่ามันจะทำงานที่แตกต่างกว่า
UITextView
และUITextfield
: พวกเขาสืบทอดมาจากUIScrollView
vs UIControl
, ไม่สามารถแก้ไขได้โดยเริ่มต้นกับแก้ไขได้โดยเริ่มต้น, multiline กับบรรทัดเดียว, โปรโตคอลผู้แทนที่แตกต่างกัน, ไม่มีตัวยึดตำแหน่งกับตัวยึดตำแหน่ง
UITextView
สำหรับย่อหน้าของข้อความ ใช้มันหากคุณต้องการย่อหน้าของข้อความไม่ใช่อย่างอื่น
นอกเหนือจากการทำงานหลายบรรทัดความแตกต่างที่สำคัญระหว่าง UITextView และ UITextField คือ UITextView ไม่ได้เสนอตัวยึดตำแหน่ง หากต้องการข้ามข้อ จำกัด นี้คุณสามารถใช้ UITextView กับ "ตัวยึดตำแหน่งปลอม"
ดูคำถาม SO นี้สำหรับรายละเอียด: ตัวยึดตำแหน่งใน UITextView
หากคุณต้องมี UITextField ที่มีข้อความ 2 บรรทัดตัวเลือกหนึ่งคือเพิ่ม UILabel เป็นมุมมองย่อยของ UITextField สำหรับบรรทัดข้อความที่สอง ฉันมี UITextField ในแอปของฉันที่ผู้ใช้มักไม่ทราบว่าสามารถแก้ไขได้ด้วยการแตะและฉันต้องการเพิ่มข้อความคำบรรยายเล็ก ๆ ที่ระบุว่า "แตะเพื่อแก้ไข" ใน UITextField
CGFloat tapLlblHeight = 10;
UILabel *tapEditLbl = [[UILabel alloc] initWithFrame:CGRectMake(20, textField.frame.size.height - tapLlblHeight - 2, 70, tapLlblHeight)];
tapEditLbl.backgroundColor = [UIColor clearColor];
tapEditLbl.textColor = [UIColor whiteColor];
tapEditLbl.text = @"Tap to Edit";
[textField addSubview:tapEditLbl];
ใช่ UITextView คือสิ่งที่คุณกำลังมองหา คุณจะต้องจัดการกับบางสิ่งที่แตกต่าง (เช่นปุ่มย้อนกลับ) แต่คุณสามารถเพิ่มข้อความได้และมันจะช่วยให้คุณเลื่อนขึ้นและลงหากมีข้อความอยู่ภายในมากเกินไป
ลิงค์นี้มีข้อมูลเกี่ยวกับการสร้างหน้าจอเพื่อป้อนข้อมูล:
ใช้ UITextView แทน UITextField
การเสริมคำตอบของ h4xxr ในข้างต้นวิธีที่ง่ายกว่าในการปรับความสูงของ UITextField คือการเลือกสไตล์เส้นขอบสี่เหลี่ยมในตัวตรวจสอบแอททริบิวต์ -> ฟิลด์ข้อความ (โดยค่าเริ่มต้นสไตล์เส้นขอบของ UITextfield คือวงรี)
การอ้างอิง: ตอบ Brian ในที่นี่: วิธีการตั้งค่าความสูง UITextField?
มีตัวเลือกอื่นที่เหมาะกับฉัน:
คลาสย่อย UITextField และเขียนทับ:
- (void)drawTextInRect:(CGRect)rect
ในวิธีนี้คุณสามารถยกตัวอย่าง:
NSDictionary *attributes = @{ NSFontAttributeName : self.font,
NSForegroundColorAttributeName : self.textColor };
[self.text drawInRect:verticalAlignedRect withAttributes:attributes];
รหัสนี้จะแสดงข้อความโดยใช้บรรทัดมากที่สุดเท่าที่จำเป็นถ้า rect มีพื้นที่เพียงพอ คุณสามารถระบุคุณสมบัติอื่น ๆ ขึ้นอยู่กับความต้องการของคุณ
ไม่ได้ใช้:
self.defaultTextAttributes
ซึ่งจะบังคับให้แสดงข้อความบรรทัดเดียว