2010-10-15 16 views
13

में टैब कुंजी प्रेस अनुकरण करें जब आईओएस के साथ एक हार्डवेयर कीबोर्ड का उपयोग किया जाता है, तो टैब या शिफ्ट-टैब दबाकर क्रमशः अगले या पिछले तार्किक उत्तरदाता पर नेविगेट किया जाता है। क्या प्रोग्रामेटिक रूप से ऐसा करने का कोई तरीका है (यानी लॉजिकल ऑर्डर को मैन्युअल रूप से ट्रैक रखने के बजाए टैब कुंजी सिमुलेट करना)?आईओएस एसडीके

+6

सवाल का डुप्लिकेट: http://stackoverflow.com/questions/3241966/ फोकस-ऑन-अगली-वैध-कुंजी-व्यू-ऑन-आईफोन जिसे एक अच्छा जवाब मिला। –

उत्तर

0

यह सुनिश्चित नहीं करता कि यह मदद करता है, लेकिन यदि आप UITextFieldDelegate लागू करते हैं, - (BOOL)textFieldShouldReturn:(UITextField *)textField को नरम कीबोर्ड की वापसी कुंजी दबाए जाने पर कॉल किया जाएगा, तो यूआईटीएक्स्टफिल्ड्स के संदर्भ में।

मैंने सीधे अपने लैपटॉप कीबोर्ड पर हिट करने की कोशिश की है और यह ऑर्डर में सभी टेक्स्टफील्ड के बीच कूदना प्रतीत होता है जिसमें आपने उन्हें दृश्य में जोड़ा है, लेकिन किसी भी अन्य प्रकार के फ़ील्ड (बटन आदि)।

कुंजीपटल पर कुंजी सिम्युलेटर के सॉफ्ट कीबोर्ड पर कुंजी अनुकरण कर रहा है, जो अपेक्षा के अनुसार काम करता है।

3

आप टैग संपत्ति का उपयोग कर "टैब-ऑर्डर" को परिभाषित कर सकते हैं। निम्नलिखित पोस्ट में वर्णन किया गया है कि अगली टैग इंडेक्स को UITextField एस, How to navigate through textfields (Next/Done Buttons) पर जाने के लिए कैसे खोजें।

यहां उस पोस्ट से कोड का एक संशोधित संस्करण है। अंतिम टैग इंडेक्स पर कीबोर्ड को हटाने के बजाय, यह निम्न कोड पहले टैग इंडेक्स पर वापस लूप करने का प्रयास करेगा।

-(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. 
} 

आप UITextField के अलावा किसी अन्य यूआई तत्व चाहते हैं, तो आप अभी भी कुछ और चेक के साथ, एक ही तर्क का उपयोग करने के लिए सक्षम होना चाहिए।

8

विलियम नियू सही है लेकिन आप नीचे दिए गए इस कोड का भी उपयोग कर सकते हैं।

मैं इस का इस्तेमाल किया है और success.Now UITextField के उदाहरण पर विचार मिल गया ...

आप UITextView के प्रतिनिधि विधि का उपयोग कर सकते हैं -(BOOL)textFieldShouldReturn:(UITextField*)textField नीचे बताये गए।

लेकिन ऐसा करने से पहले आपको प्रत्येक यूआईटीएक्स्टफिल्ड को एक वृद्धि आदेश में टैग देना होगा ... (वृद्धि आदेश आवश्यक नहीं है, लेकिन मेरे कोड के लिए यह आवश्यक है, आप भी कमांड ऑर्डर का उपयोग कर सकते हैं लेकिन कुछ कोड ऐसा करने के लिए परिवर्तन)

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

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

आशा यह आपके लिए काम करेंगे ...

मुबारक कोडिंग ....

+0

यह स्थैतिक टेक्स्टफील्ड के साथ काम करता है, और वास्तव में एक महान दृष्टिकोण है, लेकिन यदि आपके टेक्स्टफील्ड पुन: प्रयोज्य टेबलव्यूल्स में हैं तो यह सब बोनकर्स चला जाता है। – n00neimp0rtant

संबंधित मुद्दे