दिलचस्प पोस्ट
आयफोन 5 और आईफोन 4 उपकरणों दोनों के साथ xib संगत कैसे करें String.split () का उपयोग करते हुए टेक्स्ट-सीमांकक के रूप में उद्धरण चिह्नों के साथ सीएसवी फ़ाइल को विभाजित करना Scala foreach अजीब व्यवहार क्या मुझे इंट या इंट 32 का इस्तेमाल करना चाहिए? टाइमर स्वचालित रूप से कचरा एकत्र कर सकते हैं? ह्यूवाइ फोन पर "संरक्षित ऐप्स" सेटिंग, और इसे कैसे प्रबंधित करें एंड्रॉइड दोनों वेब और एक ही पाठ दृश्य में सभी @ परिवर्तन स्मृति में सूची का आकार एएसपी.NET कोर में टोकन आधारित प्रमाणीकरण (ताज़ा) एक सत्र व्हेरिएबल के रूप में फॉर्म डेटा संग्रहीत करना WCF। सर्विस जेनेरिक तरीके English.pickle को nltk.data.load के साथ लोड करने में विफल कैसे दृश्य स्टूडियो संकलन से फाइल को बाहर करने के लिए? X तत्वों के कुछ हिस्सों में एक रूबी सरणी कैसे विभाजित करें? Google Chrome / क्रोमियम और सफारी में खींचें और ड्रॉप फ़ाइल अपलोड करें?

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

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

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

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

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

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

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

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

Solutions Collecting From Web of "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];