2010-07-13 8 views
9

पर अगले वैध कुंजी दृश्य पर फ़ोकस करें क्या मैक ओएस एक्स से NSResponder विधियों -selectNextKeyView या -nextValidKeyView के लिए कोई आईफोन समकक्ष है? मुझे -becomeFirstResponder विधि के बारे में पता है, लेकिन यह पता लगाने के लिए कि कौन सा दृश्य कॉल करना है, यह बहुत सुंदर नहीं है जब पदानुक्रम अधिक जटिल हो जाते हैं।आईफोन

आईफोन सिम्युलेटर में जब मैं टैब दबाता हूं, तो इसे खोजने के लिए कुछ प्रकार का तरीका होना चाहिए, फोकस अगले UITextField पर ठीक से जाता है। इससे मुझे आश्चर्य हुआ कि जब मैं टैब दबाता हूं तो वास्तव में क्या होता है। कोई विचार?

अद्यतन: यह वही करता है जो मैं चाहता हूं, लेकिन _nextKeyResponder निजी एपीआई है, इसलिए नो-नो। निजी एपीआई का उपयोग किए बिना 'नकली' टैब कुंजी प्रेस करने का कोई तरीका है?

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    // Try to find next responder 
    UIView *nextResponder = (UIView *)[self.view _nextKeyResponder]; 

    if (nextResponder) { 
     // Found next responder, so set it. 
     [nextResponder becomeFirstResponder]; 
     [self.tableView scrollRectToVisible:[self.tableView convertRect:[nextResponder frame] fromView:nextResponder] animated:YES]; 
    } else { 
     // Not found, so remove keyboard. 
     [textField resignFirstResponder]; 
    } 
    return NO; // We do not want UITextField to insert line-breaks. 
} 

उत्तर

11

NSResponder के -selectKeyView या -nextValidKeyView के लिए सार्वजनिक आईओएस समतुल्य नहीं है।

जब पहली प्रत्युत्तर UITextField का एक उदाहरण है, टैब दबाकर UIEvent के एक निजी उपवर्ग जो -[UIApplication sendEvent:] को पारित कर दिया है, जो बारी में कॉल -[UIView _nextKeyResponder] को दर्शाता है।

-[UIView _nextKeyResponder] ऐसा लगता है कि आप ऐसा नहीं करते हैं। यह कुंजी दृश्य श्रृंखला को लूप के रूप में मानता है, इसलिए आपका else ब्लॉक कभी नहीं पहुंचाया जाएगा। इसी कारण से, यहां तक ​​कि अगर कुंजीपटल घटनाओं को संश्लेषित करने के लिए कोई सार्वजनिक एपीआई था, तो शायद आप इसका उपयोग नहीं करना चाहेंगे।

इसके बजाय, शायद आप UIWebView के UIToolbar-आधारित फॉर्म इनपुट एक्सेसरी जैसे कुछ और चाहते हैं। उचित होने पर इसके बटन सक्षम और अक्षम किए जा सकते हैं, और इसके प्रतिनिधि वास्तविक बटन प्रेस क्रियाओं को संभालते हैं।

इस तरह के एक प्रतिनिधि को सामान्य तरीके से लागू करने के लिए, हालांकि, how -[UIView _nextKeyResponder] is implemented को देखने में मददगार हो सकता है।

+0

अच्छा जवाब! मैं उस विवरण की सराहना करता हूं जिसमें आप गए थे। –

0

UITextField प्रतिनिधि -textFieldDidEndEditing: में, (उदाहरण के लिए, पाठ क्षेत्र के tag संपत्ति का परीक्षण करते हुए) विभिन्न पाठ फ़ील्ड के बीच स्विच।

जब आप एक टेक्स्ट फ़ील्ड से मेल खाते हैं, तो अगला उत्तरदाता बनने के लिए एक और टेक्स्ट फ़ील्ड या अन्य नियंत्रण सेट करें।

+1

जैसा कि मैंने मेरे सवाल में लिखा है, मुझे लगता है कि विधि के बारे में पता कर रहा हूँ। मैं बस सोच रहा था कि अगर मैं किसी टैब को संभालता हूं तो आईओएस में पहले से ही क्या लाभ उठा सकता है। –

0

मुझे आश्चर्य है कि किसी और ने आईओएस पर इसे हल नहीं किया है।

मैंने एक समाधान तैयार किया है जो आईओएस पर इच्छित किसी भी क्षेत्र में आगे और पीछे जाने के लिए टैब और शिफ्ट + टैब दोनों को संभालता है, और किसी भी निजी एपीआई का उपयोग नहीं करता है।

यहाँ लेख है: http://weaklyreferenced.wordpress.com/2012/11/13/responding-to-the-tab-and-shift-tab-keys-on-ios-5-ios-6-with-an-external-keyboard/