दिलचस्प पोस्ट
आईपैड एसडीके ने आईपैड पर इसके बाहर क्लिक करके मॉडल व्यू नियंत्रक को खारिज कर दिया एप्लिकेशन संदर्भ प्रारंभिक ईवेंट में एक हुक जोड़ने के लिए कैसे? आईओएस में Instagram पर एक छवि साझा करने के लिए कैसे? MySQL में अंतिम पंक्ति का चयन करें जावा वर्ग के नाम में मान्य वर्ण एंड्रॉइड स्टूडियो ग्रेडल मुद्दे को संस्करण 0.5.0 में अपग्रेड कर रहा है – 0.8 से 0.9 तक स्थानांतरित करने वाले ग्रैडल – एंड्रॉइड स्टूडियो 0.8.1 में अपग्रेड क्यों नॉन-डिटरनिस्टिकवादी ऑर्डर करने वाला डिक्शनरी है? कॉलिंग थ्रेड इस ऑब्जेक्ट का उपयोग नहीं कर सकता क्योंकि एक अलग थ्रेड इसका मालिक है स्प्राइट किट और ध्वनि बजाना ऐप समाप्ति की ओर जाता है PHP स्ट्रिंग से विशेष वर्ण निकालें बाश में संख्याओं की तुलना करना मैं कुंजीटोल कैसे पा सकता हूं और चला सकता हूँ वाई-फाई के बजाय एंड्रॉइड एप्लिकेशन में 3 जी कनेक्शन का उपयोग कैसे करें? जावा 8 जेडीके का उपयोग कर स्ट्रीम को अस्थिर रूपांतरित करें एनएलटीके के साथ एक नया कॉर्पस बनाना

UIView कॉपी किया जा सकता है?

बस इस तरह का उपयोग कर

UIView* view2 = [view1 copy]; //view1 existed 

इससे सिम्युलेटर इस ऐप को लॉन्च नहीं कर पाएगा।

बनाए रखने की कोशिश करें,

 UIView* view2 = [view1 retain]; //view1 existed //modify view2 frame etc 

देखने के लिए कोई भी बदलाव देखने के लिए लागू होगा 1, मैं समझता हूं कि दृश्य 2 उसी मेमोरी को दृश्य 1 के साथ साझा करता है।

क्यों नहीं UIView कॉपी किया जा सकता है? क्या कारण है?

वेब के समाधान से एकत्रित समाधान "UIView कॉपी किया जा सकता है?"

आपका ऐप शायद कुछ की तरह क्रैश करता है:

  [UIView copyWithZone:]: unrecognized selector sent to instance 0x1c6280 

इसका कारण यह है कि UIView प्रतिलिपि प्रोटोकॉल को लागू नहीं करता है, और इसलिए कोई copyWithZone नहीं है।

यह आपके लिए काम कर सकता है … दृश्य को संग्रहित करें और उसके बाद ठीक से इसे अनर्जित करें। इससे आपको एक दृश्य की एक गहरी कॉपी देनी चाहिए:

 id copyOfView = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:originalView]]; 

आप एक UIView एक्सटेंशन कर सकते हैं। नीचे उदाहरण के लिए स्विफ्ट स्निपेट, फ़ंक्शन कॉपीव्यूव एक ऑब्जेक्ट देता है ताकि आप किसी UIView के उप-वर्ग, अर्थात UIImageView कॉपी कर सकें। यदि आप केवल UIView को कॉपी करना चाहते हैं तो आप वापसी प्रकार को UIView में बदल सकते हैं।

 //MARK: - UIView Extensions extension UIView { func copyView<T: UIView>() -> T { return NSKeyedUnarchiver.unarchiveObject(with: NSKeyedArchiver.archivedData(withRootObject: self)) as! T } } 

उदाहरण उपयोग:

 let sourceView = UIView() let copiedView = sourceView.copyView() 

स्विफ्ट 3.0.1 के लिए:

 extension UIView{ func copyView() -> AnyObject{ return NSKeyedUnarchiver.unarchiveObject(with: NSKeyedArchiver.archivedData(withRootObject: self))! as AnyObject } } 

UIView NSCoping प्रोटोकॉल को लागू नहीं करता है, NSCoping में घोषणापत्र देखें:

@interface UIView : UIResponder <NSCoding, UIAppearance, UIAppearanceContainer, UIDynamicItem, UITraitEnvironment, UICoordinateSpace, UIFocusEnvironment>

इसलिए, अगर हम पद्धति की copy चाहते हैं, तो हमें NSCoping प्रोटोकॉल को किसी श्रेणी में लागू करना NSCoping या ऐसा करना

आप इस तरह से विधि बना सकते हैं:

 -(UILabel*)copyLabelFrom:(UILabel*)label{ //add whatever needs to be copied UILabel *newLabel = [[UILabel alloc]initWithFrame:label.frame]; newLabel.backgroundColor = label.backgroundColor; newLabel.textColor = label.textColor; newLabel.textAlignment = label.textAlignment; newLabel.text = label.text; newLabel.font = label.font; return [newLabel autorelease]; } 

फिर आप रिटर्न वैल्यू के लिए अपना एवर सेट कर सकते हैं और इसे बनाए रख सकते हैं:

 myLabel = [[self copyLabelFrom:myOtherLabel] retain];