2009-05-05 43 views
20

Tôi có một hộp nhập văn bản trong ứng dụng iphone của mình, khi bạn chạm vào nó trong trình mô phỏng, bàn phím bật lên. Nhưng không có cách nào để loại bỏ nó. Các trang web khác đưa ra giải pháp, mà không giải thích lý do tại sao chúng nên hoạt động và chúng không hoạt động đối với tôi. Một nói làm cho đại biểu của hộp văn bản của bạn uiview sau đó gọi resignfirstresponder trên đối tượng, nhưng nó không bao giờ được gọi. Bất kỳ đề xuất nào? Ai có thể giải thích những gì đang xảy ra? Tôi có thể hình dung ra bản thân mình nếu tôi biết mô hình thiết kế là gì ...Cách làm cho bàn phím biến mất trong trình mô phỏng iphone

Có lẽ tôi chỉ nên đặt nút "đi" để tôi có thứ gì đó để lấy nét khỏi văn bản?

Trả lời

19

Một cách để làm điều đó là để thiết lập một đối tượng như các đại biểu đến lĩnh vực văn bản và thực hiện

- (BOOL)textFieldShouldReturn:(UITextField *)textField 

trong đó bạn gọi [textField resignFirstResponder]

này sẽ làm cho bàn phím để biến mất khi họ đẩy nút return/go/done (bất cứ điều gì bạn đặt khóa bàn phím bên phải dưới cùng).

Xem tham chiếu UITextFieldDelegate để biết thêm thông tin.

+1

Khi lần đầu tiên bắt đầu, tôi thấy [những "đầu tiên của bạn Ứng dụng iOS "hướng dẫn] (http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhone101/Articles/00_Introduction.html) hữu ích. Để biết thêm về câu trả lời này, hãy xem phần phụ "Đại biểu của trường văn bản" trong ["Triển khai trình điều khiển chế độ xem"] (http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhone101/ Articles/06_ImplementingController.html). – sage

+1

Đủ đơn giản, mặc dù tại sao đây không phải là hành vi mặc định? Điều này làm việc mặc dù .. thực hiện giao diện như trên, và hook-up các 'đại biểu' kết nối trong IB cho chủ sở hữu của tập tin. – Bobby

+0

Tôi có thay thế '[textField resignFirstResponder]' bằng tên của trường văn bản của tôi, chẳng hạn như '[myTextField resignFirstResponder]', tôi không thể làm cho nó hoạt động theo cách trên xcode 4.2. – raffian

5

- (BOOL)textFieldShouldReturn:(UITextField *)textField trong ủy nhiệm của bạn được gọi khi nhấn nút quay lại.

Bạn muốn gọi [textField resignFirstResponder] và sau đó trả lại YES. Điều đó sẽ làm các trick. Ngoài ra hãy chắc chắn rằng đại biểu được thiết lập. Nếu nghi ngờ, hãy thêm điểm ngắt hoặc NSLog và xác minh.

16

Để loại bỏ bàn phím, bạn có thể sử dụng Ủy nhiệm văn bản.

Để sử dụng, hãy làm theo các bước sau ...
1. Trong chế độ xem của bạnTrình điều khiển. h thêm tuyên bố ủy quyền như sau:

@interface ViewController : UIViewController <UITextFieldDelegate> { 
    }
2. Trong chế độ xemController của bạn. m gọi phương pháp này:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
3. Sau đó viết một mã như thế này:
- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return YES; 
    }
4. Bước cuối cùng là để thiết lập đại biểu của TextField:
- (void)viewDidLoad { 
     [super viewDidLoad]; 
     self.textField.delegate = self; 
    }

+0

Thủ thuật này có hiệu quả với tất cả các trường văn bản trong một cửa sổ không? – raffian

+0

Có, nó nên ... Dù sao nếu bạn muốn áp dụng các đại biểu chỉ trên một số lĩnh vực văn bản, trong textFieldShouldReturn: phương pháp thay đổi [textField resignFirstResponder]; với [yourTextField resignFirstResponder]; – matteodv

+0

Không thể làm việc này, đã làm mọi thứ, thậm chí còn thêm 'myTextField.delegate = self' trong 'initWithNibName' trong ViewController, nhưng delegate không bao giờ được gọi – raffian

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