2012-07-07 21 views
7

Tôi có một textField được đặt để thay đổi dataSource của tableView với mỗi chữ cái được nhập (và gọi reloadData).Tải lại UITableViewData làm cho UITextField từ chứcFirstResponder

Nhưng vì một lý do nào đó, mỗi lần nhập một chữ cái, bàn phím sẽ bị loại bỏ.

Bất cứ ai cũng biết tại sao?

+1

Đăng một số mã của các phương pháp để bắt đầu chỉnh sửa trường văn bản của bạn và bất kỳ phương pháp liên quan nào khác, chúng tôi không thể giúp bạn nếu chúng tôi không thể thấy vấn đề là gì. – 8vius

+1

bản sao có thể có của [UITableView reloadData từ chối trả lời đầu tiên] (http://stackoverflow.com/questions/6409370/uitableview-reloaddata-resigns-first-responder) – CodaFi

+0

@CodaFi bạn đóng đinh nó. TextField nằm trong một ô tùy chỉnh ở phía trên cùng của bảng vì vậy khi tôi tải lại dữ liệu, nó sẽ tải lại ô đó do đó từ bỏ mọi thứ bên trong nó. CẢM ƠN BẠN!!! –

Trả lời

10

Trường văn bản của bạn đang từ chức vì các ô được tải lại được gửi một thông báo -resignFirstResponder do thực tế là sự sống còn của chúng không được đảm bảo sau khi tải lại. Xem câu hỏi này related để biết thêm.

+0

Cách giải quyết tốt là thêm trường văn bản ẩn vào chế độ xem và chuyển tiêu điểm sang trường văn bản đó khi tải lại bảng. Sau khi bảng được tải lại, bạn có thể chuyển tiêu điểm trở lại trường văn bản gốc của bạn, để giữ bàn phím đó mở. [self.fakeTextField trở thànhFirstResponder]; [self.tableView reloadData]; [self.textField performSelector: @selector (trở thànhFirstResponder) withObject: nil afterDelay: .01]; – hobosf

-3

Sử dụng phương pháp này textFieldShouldReturn: và thêm UITextFieldDelegate ủy quyền trong tệp YourClass.h của bạn. đặt ủy nhiệm cho yourTextfield và viết mã sau theo phương thức viewDidLoad.

yourTextfield.delegate = self;

và cũng thực hiện như sau textFieldShouldReturn: như

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 

     [theTextField resignFirstResponder]; 

    return YES; 
} 

Tôi nghĩ rằng nó sẽ rất hữu ích cho bạn.

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