2009-08-28 27 views
212

Tôi đang phát triển một ứng dụng mà người dùng phải viết một số thông tin. Vì mục đích này, tôi cần một số UITextField là nhiều dòng (nói chung là UITextField là một dòng).Làm thế nào để tạo một UITextfield đa dòng?

Vì tôi là Googling, tôi tìm câu trả lời bằng cách sử dụng UITextView thay vì UITextfield cho mục đích này.

+1

sử dụng các lớp học của bên thứ ba này nhập khẩu dự án xcode của bạn và sử dụng nó, liên kết của nó làm việc quá tốt: https: // github. com/adonoho/HPGrowingTextView –

+0

Đây là điều khiển nhỏ tôi đã viết chính xác cho mục đích đó. nó có hỗ trợ nhiều dòng và nút Xong để đóng bàn phím. vui lòng sử dụng https://code.google.com/p/galtextfield/ –

Trả lời

370

UITextField là đặc biệt một dòng duy nhất.

Tìm kiếm trên Google của bạn là chính xác, bạn cần sử dụng UITextView thay vì UITextField để hiển thị và chỉnh sửa văn bản đa dòng.

Trong Trình tạo giao diện, thêm UITextView nơi bạn muốn và chọn hộp "có thể chỉnh sửa". Theo mặc định, nó sẽ là nhiều dòng.

+6

Vì vậy, hãy cho tôi biết cách ứng dụng Lịch gốc tạo Chế độ xem với phần giữ chỗ và từ bọc cho ghi chú tại màn hình thêm sự kiện? – zest

+2

cách đặt trình giữ chỗ cho UITextView? – Mani

+4

Bạn không thể thêm trình giữ chỗ vào TextView, nhưng bạn có thể thêm nhãn màu xám trên TextView và ẩn nó nếu người dùng nhập một số văn bản. –

2

Có, UITextView là những gì bạn đang tìm kiếm. Bạn sẽ phải đối phó với một số thứ khác nhau (như phím trả về) nhưng bạn có thể thêm văn bản vào nó, và nó sẽ cho phép bạn di chuyển lên và xuống nếu có quá nhiều văn bản bên trong.

Liên kết này có thông tin về thực hiện một màn hình để nhập dữ liệu:

create a data entry screen

+0

Liên kết đã hoạt động với tôi –

7

Ngoài hành vi nhiều dòng, sự khác biệt chính giữa UITextView và UITextField là UITextView không đề xuất trình giữ chỗ. Để bỏ qua giới hạn này, bạn có thể sử dụng UITextView với "trình giữ chỗ giả".

Xem câu hỏi SO này để biết chi tiết: Placeholder in UITextView.

21

Ok tôi đã làm nó với một số trick;) Đầu tiên xây dựng một UITextField và tăng nó size như thế này:

CGRect frameRect = textField.frame; 
     frameRect.size.height = 53; 
     textField.frame = frameRect; 

Sau đó xây dựng một UITextView chính xác ở cùng khu vực mà u đã UITextField của tôi, và xóa background color của nó . Bây giờ có vẻ như bạn có nhiều dòng TextField!

+1

Tôi đã sử dụng bố cục tự động và ghim tất cả các cạnh của UITextField vào UITextView. Lừa thực sự tuyệt vời, cảm ơn! – phatmann

+0

xin vui lòng @phantmann, bạn có thể cho chúng tôi thấy mã của bạn để bố trí tự động không? – Esteve

+6

Điều này tạo ra một 'UITextView'.Điểm có UITextField là nó hoạt động khác với 'UITextView'. –

1

Nếu bạn phải có UITextField với 2 dòng văn bản, một tùy chọn là thêm UILabel làm phần phụ của UITextField cho dòng văn bản thứ hai. Tôi có một UITextField trong ứng dụng của tôi mà người dùng thường không nhận ra là có thể chỉnh sửa bằng cách nhấn và tôi muốn thêm một số văn bản phụ đề nhỏ có nội dung "Nhấn để chỉnh sửa" vào 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]; 
0

Một bổ sung cho câu trả lời h4xxr ở trên, một cách dễ dàng hơn để điều chỉnh chiều cao của UITextField là chọn phong cách biên giới vuông trong các thuộc tính inspectors-> Text Field. (Theo mặc định, phong cách biên giới của một UITextField là hình elip.)

tham khảo: Giải đáp Brian ở đây: How to set UITextField height?

1

sử dụng UITextView thay vì UITextField

9

Bạn có thể giả mạo một UITextField sử dụng UITextView. Vấn đề bạn sẽ gặp phải là bạn mất chức năng của trình giữ chỗ.

Nếu bạn chọn sử dụng một UITextView và cần giữ chỗ, làm điều này:

Trong viewDidLoad của bạn thiết lập màu sắc và văn bản để giữ chỗ:

myTxtView.textColor = .lightGray 
myTxtView.text = "Type your thoughts here..." 

Sau đó thực hiện giữ chỗ biến mất khi bạn UITextView được chọn:

func textViewDidBeginEditing (textView: UITextView) { 
    if myTxtView.textColor.textColor == ph_TextColor && myTxtView.isFirstResponder() { 
     myTxtView.text = nil 
     myTxtView.textColor = .white 
    } 
} 

Khi người dùng hoàn tất chỉnh sửa, đảm bảo có giá trị. Nếu không có, thêm placeholder một lần nữa:

func textViewDidEndEditing (textView: UITextView) { 
    if myTxtView.text.isEmpty || myTxtView.text == "" { 
     myTxtView.textColor = .lightGray 
     myTxtView.text = "Type your thoughts here..." 
    } 
} 

tính năng khác bạn có thể cần phải giả:

UITextField của thường tận dụng tất cả các lá thư, bạn có thể thêm tính năng đó để UITableView:

myTxtView.autocapitalizationType = .words 

UITextField không thường cuộn:

myTxtView.scrollEnabled = false 
-1

Có một tùy chọn mà làm việc cho tôi:

Subclass UITextField và ghi đè lên:

- (void)drawTextInRect:(CGRect)rect 

Trong phương pháp này, bạn có thể cho ví dụ:

NSDictionary *attributes = @{ NSFontAttributeName : self.font, 
            NSForegroundColorAttributeName : self.textColor }; 

    [self.text drawInRect:verticalAlignedRect withAttributes:attributes]; 

Mã này sẽ làm cho văn bản sử dụng như nhiều dòng theo yêu cầu nếu rect có đủ không gian. Bạn có thể chỉ định bất kỳ thuộc tính nào khác tùy thuộc vào nhu cầu của bạn.

Không sử dụng:

self.defaultTextAttributes 

đó sẽ buộc một văn bản dòng render

Các vấn đề liên quan