2010-08-13 18 views
7

मेरे आईओएस एप्लिकेशन के इंटरफ़ेस में मेरे पास स्पष्ट पूर्ववत & रीडो बटन है (शेक-टू-अंडो एक सुंदर हेवीवेट एक्शन है और इस संदर्भ में, अंडो बहुत बार किया जाता है)। आम तौर पर, मैं NSUndoManager के canUndo और canRedo कुंजी पथों को देखने के लिए केवीओ का उपयोग करता हूं और & नोटिफिकेशन के रूप में बटन अक्षम करता है। दुर्भाग्यवश, NSUndoManager उन महत्वपूर्ण पथों के लिए केवीओ-अनुरूप नहीं प्रतीत होता है - या कम से कम, मैं ' मैं अधिसूचनाओं के मामले में कुछ भी नहीं देख रहा हूँ।NSUndoManager और पूर्ववत बटन को सक्षम/अक्षम करना

तो मेरा सवाल है: मैं यह कैसे काम कर सकता हूं? क्या मैं सिर्फ केवीओ के साथ गलत कर रहा हूं? (मैंने डबल & ट्रिपल चेक किया है लेकिन हमेशा यह संभावना है)। क्या ऐसा करने का कोई और तरीका है जिसके बारे में मैं सोच नहीं रहा हूं? (हालांकि, हर बार रनलोप स्पिन के दौरान -कंडू के मूल्य की जांच करने के बारे में मैंने पाया है, लेकिन मेरे पास एक खराब कोड गंध है)।

(ध्यान दें कि यह काफी संभव है कि NSUndoManager iOS और मैक ओएस एक्स पर अलग है, तो मुझे नहीं लगता कि "यह मैक पर काम करता है" इस मामले में, एक उपयोगी उत्तर होने जा रहा है)

उत्तर

12

अपने NSUndoManager के NSUndoManagerDidUndoChangeNotification और मित्रों के लिए पंजीकरण करें जब नए पूर्ववत समूह बनाए जाते हैं और स्टैक को पॉप अप करते हैं और अपने बटन के राज्यों को उचित रूप से अपडेट करते हैं।

+3

बहुत बढ़िया - NSUndoManagerWillCloseUndoGroupNotification वह है जिसे मैंने पहले याद किया था। सबकुछ अब समझ में आता है। धन्यवाद @aclark। –

+1

एक आखिरी अनुवर्ती अनुवर्ती: यह सब पूरी तरह से काम किया। –

+0

प्रलेखन कहता है: "एक NSUndoManager' ऑब्जेक्ट से पहले पोस्ट किया गया एक पूर्ववत समूह बंद करता है, जो 'endUndoGrouping' विधि' के कार्यान्वयन में होता है। हालांकि, मैं पुष्टि कर सकता हूं कि जब आप एक एकल पूर्ववत पंजीकृत करते हैं तो यह पोस्ट हो जाता है (उदा। '-registerUndoWithTarget: selector: object: ') के साथ। 'Inform.object' (' NSUndoManager') पर 'canUndo' को कॉल करने के लिए बहुत उपयोगी है और यूआई में किसी भी" पूर्ववत करें "बटन को सक्षम/अक्षम करें। –