2010-10-15 42 views
13

Khi bàn phím phần cứng được sử dụng với iOS, nhấn tab hoặc tab shift sẽ tự động điều hướng đến bộ phản hồi logic tiếp theo hoặc trước đó tương ứng. Có cách nào để làm cùng một chương trình (ví dụ: mô phỏng phím tab thay vì theo dõi thứ tự logic theo cách thủ công) không?Mô phỏng phím Tab Nhấn trong iOS SDK

+6

Duplicate của câu hỏi: http://stackoverflow.com/questions/3241966/ focus-on-next-valid-key-view-trên-iphone có một câu trả lời tuyệt vời. –

Trả lời

0

Không chắc chắn nếu điều này giúp, nhưng trong bối cảnh của một UITextFields, nếu bạn thực hiện UITextFieldDelegate, - (BOOL)textFieldShouldReturn:(UITextField *)textField sẽ được gọi khi phím quay lại của bàn phím mềm được nhấn.

Tôi đã cố gắng nhấn trực tiếp trên bàn phím máy tính xách tay của tôi và dường như chuyển giữa tất cả các trường văn bản theo thứ tự bạn đã thêm chúng vào chế độ xem nhưng không đi đến bất kỳ loại trường nào khác (Các nút vv).

phím trên bàn phím là mô phỏng phím trên bàn phím mềm của trình giả lập, hoạt động như mong đợi.

3

Bạn có thể xác định "thứ tự tab" bằng thuộc tính thẻ. Bài đăng sau mô tả cách tìm chỉ mục thẻ tiếp theo để truy cập cho UITextField s, How to navigate through textfields (Next/Done Buttons).

Đây là phiên bản đã sửa đổi của mã từ bài đăng đó. Thay vì xóa bàn phím ở chỉ mục thẻ cuối cùng, mã sau đây sẽ cố gắng lặp lại chỉ mục thẻ đầu tiên.

-(BOOL)textFieldShouldReturn:(UITextField*)textField; 
{ 
    NSInteger nextTag = textField.tag + 1; 
    // Try to find next responder 
    UIResponder* nextResponder = [textField.superview viewWithTag:nextTag]; 
    if (nextResponder) { 
    // Found next responder, so set it. 
    [nextResponder becomeFirstResponder]; 

    return NO; 
    } 

    // Try to find the first responder instead... 
    // Assuming the first tag index is 1 
    UIResponder* firstResponder = [textField.superview viewWithTag:1]; 
    if (firstResponder) { 
    // loop back to the first responder 
    [firstResponder becomeFirstResponder]; 
    } else { 
    // Not found, so remove keyboard. 
    [textField resignFirstResponder]; 
    } 

    return NO; // We do not want UITextField to insert line-breaks. 
} 

Nếu bạn muốn một yếu tố giao diện người dùng khác hơn UITextField, bạn vẫn sẽ có thể sử dụng cùng một logic, với một vài kiểm tra hơn.

8

William Niu là đúng nhưng bạn cũng có thể sử dụng mã này được giải thích bên dưới.

Tôi đã sử dụng này và nhận được success.Now xem xét ví dụ của UITextField ...

Bạn có thể sử dụng phương pháp đại biểu UITextView của -(BOOL)textFieldShouldReturn:(UITextField*)textField như được giải thích dưới đây. Nhưng trước khi thực hiện điều này, bạn cần phải cung cấp thẻ cho mỗi UITextField theo thứ tự tăng dần ... (Thứ tự tăng lên là không cần thiết, nhưng đối với mã của tôi là bắt buộc, bạn cũng có thể sử dụng thứ tự giảm dần nhưng một số mã thay đổi để làm điều này)

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

    NSInteger nextTag = textField.tag + 1; 
    UIResponder* nextResponder = [self.view viewWithTag:nextTag]; 
    if (nextResponder) { 
     [nextResponder becomeFirstResponder];  
    } else { 
     [textField resignFirstResponder]; 
    } 
    return YES; 
} 

Hy vọng điều này sẽ làm việc cho bạn ...

Chúc mừng mã hóa ....

+0

Điều này làm việc với các trường văn bản tĩnh, và thực sự là một cách tiếp cận tuyệt vời, nhưng tất cả đều trở nên điên rồ nếu các vùng văn bản của bạn có thể sử dụng lại trong tableviewcell. – n00neimp0rtant

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