2013-02-07 39 views
6

UIKit टेक्स्ट इनपुट घटक, जैसे UITextView और UITextField में कस्टम कीबोर्ड जोड़ने के लिए inputView संपत्ति है। मेरे पास दो प्रश्न हैं जो मुझसे संबंधित हैं।एनिमेटिंग UITextInput के textInputView

  1. तो कुंजीपटल वर्तमान में दृश्यमान है और संपत्ति के लिए एक नया इनपुट दृश्य के लिए सेट है, कुछ नहीं होता। पहली प्रतिक्रियाकर्ता स्थिति को इस्तीफा देना और प्राप्त करना इनपुट को रीफ्रेश करता है और नया दृश्य प्रदर्शित करता है। क्या यह करने का सबसे अच्छा तरीका है? यदि ऐसा है तो यह मेरे बड़े प्रश्न का उत्तर दे सकता है:

  2. क्या दो इनपुट दृश्यों के बीच संक्रमण को एनिमेट करना संभव है?

+0

'textInputView' संपत्ति केवल पढ़ने के लिए। इसे बदला नहीं जा सकता है। जब एक फ़ील्ड से दूसरे फ़ील्ड में फ़ोकस बदलते हैं, तो आप 'UITextInput' आधारित ऑब्जेक्ट के एक नए नए उदाहरण से निपट रहे हैं। – rmaddy

+0

उप-वर्ग संपत्ति को ओवरराइड कर सकते हैं ताकि इसे लिखने योग्य बनाया जा सके। UITextField.h से: @property (readwrite, retain) UIView * inputView; 'इसे स्विच करना ठीक काम करता है, यह अगली बार जब इनपुट पहले उत्तरदाता बन जाता है तब तक दृश्य पदानुक्रम को अपडेट नहीं करता है। –

+3

आप 'UITextField inputView' और 'UITextInput textInputView' को भ्रमित कर रहे हैं। ये एक ही चीज नहीं हैं। लेकिन आप सही हैं कि 'UITextField' और' UITextView' की 'inputView' प्रॉपर्टी को बदलना प्रभावित नहीं होता है यदि फ़ील्ड/व्यू पहले से ही पहला प्रतिसादकर्ता है। – rmaddy

उत्तर

1
UIResponder डॉक्स से

:

प्रत्युत्तर वस्तुओं है कि उपयोगकर्ता से इनपुट इकट्ठा करने के लिए इस संपत्ति ReadWrite के रूप में redeclare और इसका इस्तेमाल अपने कस्टम इनपुट व्यू प्रबंधन करने के लिए करना चाहिए एक कस्टम दृश्य की आवश्यकता है। जब रिसीवर बाद में पहला उत्तरदाता बन जाता है, तो उत्तरदाता आधारभूत संरचना स्वचालित इनपुट दृश्य को स्वचालित रूप से प्रस्तुत करती है। इसी तरह, जब दृश्य अपनी पहली प्रतिक्रियाकर्ता स्थिति से इस्तीफा दे देता है, तो उत्तरदाता आधारभूत संरचना स्वचालित रूप से निर्दिष्ट दृश्य को खारिज कर देती है।

तो दुर्भाग्य से 1 का जवाब हाँ है और 2 नंबर

0
  1. है असल में वहाँ एक तरीका है यह सफाई से ऐसा करने के लिए: UIResponder के reloadInputViews, आईओएस 3.2 से उपलब्ध है!

  2. मुझे लगता है कि आप कुछ अतिरिक्त काम के साथ यह एनिमेटेड कर सकते हैं:

    • एक उच्च UIWindowLevel कुंजीपटल खिड़की से की एक स्पष्ट पृष्ठभूमि खिड़की बनाएँ।
    • वहां अपना कस्टम कीबोर्ड जोड़ें और इसकी फ्रेम को जगह में एनिमेट करें।
    • फिर इसे अपने टेक्स्ट इनपुट के inputView के रूप में सेट करें और जैसा कि आप करते हैं, पहले उत्तरदाता को रीफ्रेश करें।

आपका कस्टम कुंजीपटल कुंजीपटल एक करने के लिए अपने कस्टम खिड़की से अपनी मूल दृश्य बदल जाएगा, लेकिन उम्मीद है कि उपयोगकर्ता दिखाई नहीं देगा;)