दिलचस्प पोस्ट
आईफोन – अगर फोन निष्क्रिय हो जाता है तो भी निष्क्रिय हो जाता है ChromeDriver – डेवलपर मोड एक्सटेंशन सेलेनियम वेब ड्रिवर स्वचालन पर पॉप अप अक्षम करें एचडीएफएस त्रुटि: केवल 1 के स्थान पर, 0 नोड्स को दोहराया जा सकता है इकाई ढांचे के साथ गतिशील क्वेरी बनाना क्या जावा संग्रह मैं उपयोग करना चाहिए? वसंत में एक क्वार्ट्ज नौकरी में बीन संदर्भ इंजेक्ट? कैसे जांच करें कि कोई संख्या दो मानों के बीच है? PHP का उपयोग करके पूर्ण यूआरएल में रिश्तेदार पथ को ट्रांसफ़ॉर्म करें जब परमाणु बुलियन की बजाए जावा में अस्थिर बुलियन का उपयोग करना बेहतर है? अपाचे दूसरे पोर्ट पर रिडायरेक्ट पुनरावर्तन के वास्तविक दुनिया उदाहरण क्लाइंट ब्राउज़र से अमेज़ॅन एस 3 सीधी फाइल अपलोड – निजी कुंजी प्रकटन ASP.NET WebForms में jQuery के साथ एक 'WebMethod' कॉल करना रेगेक्स मुद्रा सत्यापन अपवाद क्यों है। प्रिंट स्टैक्सट्रेस () बुरा व्यवहार माना जाता है?

एक रीब्यूबल UITableViewCell को एक Nib से लोड करना

मैं कस्टम UITableViewCells डिजाइन करने और http://forums.macrumors.com/showthread.php?t=545061 पर पाया धागे में वर्णित तकनीक का उपयोग करके उन्हें ठीक करने में सक्षम हूं। हालांकि, उस पद्धति का उपयोग करने से आप सेल को फिर से उपयोगकर्ता के साथ पेश करने की इजाजत नहीं देता, जिसका मतलब है कि आपको प्रत्येक कॉल के प्रत्येक सेल के पूरे नए इंस्टॉलेशन बनाना होगा। क्या किसी ने फिर से उपयोग के लिए विशेष सेल प्रकार कैश करने का एक अच्छा तरीका निकाला है, लेकिन फिर भी उन्हें इंटरफेस बिल्डर में डिज़ाइन करने में सक्षम हैं?

Solutions Collecting From Web of "एक रीब्यूबल UITableViewCell को एक Nib से लोड करना"

बस उपयुक्त विधि हस्ताक्षर के साथ एक विधि को लागू करें:

- (NSString *) reuseIdentifier { return @"myIdentifier"; } 

दरअसल, जब आप इंटरफ़ेस बिल्डर में सेल का निर्माण कर रहे हैं, तो वहां केवल पुन: उपयोग पहचानकर्ता सेट करें:

IB_reuse_identifier

या अगर आप एक्सकोड 4 चला रहे हैं, तो विशेषता इंस्पेक्टर टैब की जांच करें:

यहां छवि विवरण दर्ज करें

(संपादित करें: आपके XIB द्वारा XCode द्वारा जेनरेट किए जाने के बाद, इसमें एक खाली UIView है, लेकिन हमें एक UITableViewCell की आवश्यकता है, इसलिए आपको मैन्युअल रूप से UIView को निकालना होगा और एक तालिका दृश्य सेल डालना होगा। बेशक, आईबी किसी भी यूआईटीएबल वीक्सेल पैरामीटर नहीं दिखाएगा UIView।)

अब, IOS 5 में इसके लिए एक उपयुक्त UITableView विधि है:

 - (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier 

मुझे याद नहीं है कि मुझे यह कोड मूल रूप से मिला है, लेकिन यह मेरे लिए अब तक बहुत अच्छा काम कर रहा है।

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"CustomTableCell"; static NSString *CellNib = @"CustomTableCellView"; UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellNib owner:self options:nil]; cell = (UITableViewCell *)[nib objectAtIndex:0]; } // perform additional custom work... return cell; } 

उदाहरण इंटरफ़ेस बिल्डर सेटअप …

वैकल्पिक पाठ http://i32.tinypic.com/a9mnap.jpg

इस सवाल पर मैंने जो जवाब दिया उसे देखो:

क्या इंटरफेस बिल्डर में एनएससीसेल उप-वर्गों को डिजाइन करना संभव है?

आईबी में यूआईटीबल वीक्सेल को डिज़ाइन करना संभव नहीं है, यह वांछनीय है क्योंकि अन्यथा सभी मैनुअल वायरिंग और कई तत्वों की नियुक्ति बहुत थकाऊ है। जब तक संभव हो तो सभी तत्व अपारदर्शी बनाने के लिए सावधान रहें, जब तक कि प्रदर्शन ठीक है। यूआईटेबल वीक्सेल के गुणों के लिए आईबी में रीयूआईडीआईडी ​​सेट किया गया है, तब आप dequeue करने का प्रयास करते समय कोड में मिलान पुन: उपयोग आईडी का उपयोग करते हैं।

मैंने पिछले साल WWDC में कुछ प्रस्तुतकर्ताओं से भी सुना है कि आपको आईबी में टेबल व्यू कोशिकाओं को नहीं बनाया जाना चाहिए, लेकिन यह चारपाई का भार है।

आईओएस 4.0 के अनुरूप, आईओएस डॉक्स में विशिष्ट निर्देश हैं जो इस काम को सुपर-फास्ट बनाते हैं:

http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7

नीचे स्क्रॉल करें जहां यह यूइटेबल वीजसेल के उप-क्लासेस के बारे में बात करता है

यहां एक और विकल्प है:

 NSString * cellId = @"reuseCell"; //... NSArray * nibObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomTableCell" owner:nil options:nil]; for (id obj in nibObjects) { if ([obj isKindOfClass:[CustomTableCell class]]) { cell = obj; [cell setValue:cellId forKey:@"reuseIdentifier"]; break; } } 

मैं अपने कस्टम व्यू कोशिकाओं को एक समान तरीके से बना देता हूं – सिवाय मैं एक आईबीओटलेट के माध्यम से सेल को कनेक्ट करता हूं।

[nib objectAt...] सरणी में वस्तुओं के पदों में बदलाव के लिए दृष्टिकोण अतिसंवेदनशील है।

UIViewController दृष्टिकोण अच्छा है – बस इसे करने की कोशिश की, और यह बहुत अच्छा काम करता है

परंतु…

सभी मामलों में initWithStyle constructor को नहीं कहा जाता है, इसलिए कोई डिफ़ॉल्ट प्रारंभिकरण नहीं किया जाता है।

मैंने initWithCoder या awakeFromNib का उपयोग करने के बारे में विभिन्न स्थानों को पढ़ा है, लेकिन कोई निर्णायक सबूत नहीं है कि इनमें से कोई भी सही तरीके है।

cellForRowAtIndexPath पद्धति में कुछ प्रारंभिकरण विधि को स्पष्ट रूप से बुला देने के अलावा मुझे अभी तक इसका उत्तर नहीं मिला है

कुछ समय पहले मुझे blog.atebits.com पर इस विषय पर एक महान ब्लॉग पोस्ट मिला, और तब से मेरे सभी यूआईटेबल वीक्सेल के लिए लॉरन ब्रिचटर एबीटेबल वीक्सेल क्लास का उपयोग करना शुरू कर दिया है।

आप अपने सभी विगेट्स को रखने के लिए एक सरल कंटेनर UIView के साथ समाप्त होते हैं, और स्क्रॉलिंग तेजी से बिजली है

आशा है कि यह उपयोगी है

यह तकनीक भी काम करती है और आपके नियंत्रक में मैमोरी प्रबंधन के लिए एक नियंत्रक की आवश्यकता नहीं होती है। यहां, कस्टम टेबल व्यू सेल "कस्टम सीएल। एक्सब" नाम के एक xib में रहता है।

  static NSData *sLoadedCustomCell = nil; cell = [tableView dequeueReusableCellWithIdentifier:@"CustomCell"]; if (cell == nil) { if (sLoadedCustomCell == nil) { // Load the custom table cell xib // and extract a reference to the cell object returned // and cache it in a static to avoid reloading the nib again. for (id loadedObject in [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil]) { if ([loadedObject isKindOfClass:[UITableViewCell class]]) { sLoadedCustomCell = [[NSKeyedArchiver archivedDataWithRootObject: loadedObject] retain]; break; } } cell = (UITableViewCell *)[NSKeyedUnarchiver unarchiveObjectWithData: sLoadedCustomCell]; } 

लुई विधि ने मेरे लिए काम किया यह कोड है जिसे मैं नीब से UITableViewCell बनाने के लिए उपयोग करता हूं:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomCellId"]; if (cell == nil) { UIViewController *c = [[UIViewController alloc] initWithNibName:@"CustomCell" bundle:nil]; cell = (PostCell *)c.view; [c release]; } return cell; } 
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *simpleTableIdentifier = @"CustomCell"; CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil]; cell = [nib objectAtIndex:0]; [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; } return cell; } 

Gustavogb समाधान मेरे लिए काम नहीं करता, जो मैंने कोशिश की वह है:

 ChainesController *c = [[ChainesController alloc] initWithNibName:@"ChainesController" bundle:nil]; [[NSBundle mainBundle] loadNibNamed:@"ChaineArticleCell" owner:c options:nil]; cell = [c.blogTableViewCell retain]; [c release]; 

यह काम करने लगता है ब्लॉगटेबल वीक्सेल सेल के लिए आईबीओटलेट है और चेनस कंट्रोलर फाइल के मालिक हैं।

dequeueWithReuseIdentifier बारे में UITableView डॉक्स से: "सेल ऑब्जेक्ट को पुन: उपयोग करने की पहचान करने वाली एक स्ट्रिंग। डिफ़ॉल्ट रूप से, पुन: उपयोग करने योग्य सेल की पहचानकर्ता उसका वर्ग नाम है, लेकिन आप इसे किसी भी मनमाना मान में बदल सकते हैं।"

ओवरराइडिंग -रूसआईडेंटफ़ीयर खुद को जोखिम भरा है। यदि आपके सेल उप-वर्ग के दो उप-वर्ग हैं, तो क्या होगा, और इन दोनों को एक टेबल दृश्य में उपयोग करें? अगर वे सुपर पर पुनः पहचान पहचानकर्ता कॉल भेजते हैं तो आप गलत प्रकार के सेल को डील्यूज़ करेंगे ………….. मुझे लगता है कि आपको पुन: उपयोग की गई पहचान विधि को ओवरराइड करने की ज़रूरत है, लेकिन इसे एक आरोपी पहचानकर्ता स्ट्रिंग। या, यदि कोई निर्दिष्ट नहीं किया गया है, तो क्या यह एक स्ट्रिंग के रूप में कक्षा लौटाएगा।

इसके लिए क्या मायने रखता है, मैंने आईफोन टेक वार्ता में से एक में एक आईफोन इंजीनियर से पूछा। उनका जवाब था, "हाँ, कोशिकाओं को बनाने के लिए आईबी का उपयोग करना संभव है। लेकिन ऐसा मत करो, कृपया नहीं।"

मैंने ऐप्पल के निर्देशों का पालन किया जैसा कि बेन मशर (धन्यवाद!) द्वारा मिला, लेकिन यह पाया कि ऐप्पल ने एक महत्वपूर्ण बिंदु छोड़ा। आईबी में जिस ऑब्जेक्ट का वे डिजाइन करते हैं, वह सिर्फ एक यूआईटीबल दृश्यकेल है, जैसा कि वे उस चर से लोड करते हैं। लेकिन अगर आप इसे वास्तव में UITableViewCell के कस्टम उप-वर्ग के रूप में सेट करते हैं, और उप-क्लास के लिए कोड फ़ाइलों को लिखते हैं, तो आप आईबीओलेटलेट घोषणाएं और आईबीबीएशन विधियों को कोड में लिख सकते हैं और आईबी में अपने कस्टम तत्वों तक उन्हें तार कर सकते हैं। तब इन तत्वों तक पहुंच के लिए दृश्य टैग का उपयोग करने की कोई ज़रूरत नहीं है और आप चाहते हैं कि किसी भी तरह की पागल सेल बना सकते हैं। यह कोको टच स्वर्ग है