नकली मालिक बनाना काम करेगा; हालांकि, ऐसा समाधान नाजुक और अतुलनीय हो सकता है। एक मायने में, सेल स्वयं का मालिक है, लेकिन यह भी तकनीकी रूप से गलत है। सच्चाई यह है कि UITableViewCell
के मालिक नहीं हैं।
कस्टम तालिका दृश्य कक्षों को लागू करने का उचित तरीका पहले UITableViewCell का एक कस्टम उप-वर्ग बनाना है।इस कक्षा में आप सभी आईबीओटलेट्स और सेल के लिए परिभाषित करेंगे। यहाँ एक हेडर फाइल का एक नमूना है:
+ (id)cellForTableView:(UITableView *)tableView reuseIdentifier:(NSString *)reuseID fromNib:(UINib *)nib {
if (!reuseID)
reuseID = [self cellIdentifier];
id cell = [tableView dequeueReusableCellWithIdentifier:reuseID];
if (!cell) {
NSArray * nibObjects = [nib instantiateWithOwner:nil options:nil];
// Sanity check.
NSAssert2(([nibObjects count] > 0) &&
[[nibObjects objectAtIndex:0] isKindOfClass:[self class]],
@"Nib '%@' does not appear to contain a valid %@",
[self nibName], NSStringFromClass([self class]));
cell = [nibObjects objectAtIndex:0];
}
return cell;
}
इस विधि निर्माण कोड के सभी समाहित:
@interface RBPersonCell : UITableViewCell
@property (nonatomic, strong) IBOutlet UILabel * nameLabel;
@property (nonatomic, strong) IBOutlet UILabel * ageLabel;
- (void)setupWithPerson:(Person *)person;
@end
वहाँ से, मुझे लगता है कि निब से सेल बनाता है एक सुविधा की विधि, यदि आवश्यक हो तो है इसलिए मुझे इसे कभी नहीं देखना है या इसे फिर से लिखना है। यह मानता है कि कस्टम सेल निब में पहला रूट दृश्य है। यह एक काफी सुरक्षित धारणा है क्योंकि आपके पास केवल रूट सेल के रूप में कस्टम सेल होना चाहिए।
इस कोड के साथ, आप इंटरफ़ेस बिल्डर में काम करने के लिए तैयार हैं। आपको सबसे पहले पहचान निरीक्षण में कस्टम क्लास सेट करने की आवश्यकता है। इसके बाद, अपने सेल पहचानकर्ता को सेट करना न भूलें। सुविधा के लिए, कस्टम क्लास के नाम का उपयोग करना सबसे अच्छा है। जब आप अपने कनेक्शन खींचते हैं, उन्हें फ़ाइल के मालिक को खींचने के बजाय, अपने कनेक्शन को कस्टम सेल पर खींचें।
कस्टम तालिका दृश्य कक्षों के बारे में मैंने जो कुछ सीखा है, वह iOS Recipes व्यंजनों 15-16 से आता है। से सीधे free extract है। आप अधिक जानकारी के लिए उस पुस्तक को देख सकते हैं।
संपादित करें:
मैं अंत में मेरी RBSmartTableViewCell
वर्ग सोर्सिंग को खोलने के लिए चारों ओर हो गया। आप इसे मेरे GitHub पर पा सकते हैं। आपको आईओएस व्यंजनों से सीधे कोड की तुलना में इस वर्ग को अधिक उपयोगी पाया जाना चाहिए, क्योंकि मेरी कक्षा सभी कोशिकाओं को समान रूप से मानती है, भले ही वे XIBs, UIStoryboard, या कोड का उपयोग करके बनाए गए हों। इस रेपो में काम करने वाले नमूने भी शामिल हैं।
पूर्ण sidenote, क्या आप मुझे किसी प्रकार की मार्गदर्शिका या नमूना के बारे में बता सकते हैं कि आप यह कैसे कर रहे हैं क्योंकि यह बहुत अच्छा लगता है, वर्तमान में मुझे अपने कस्टम सेल में उपयोग करने के लिए उचित दृश्य खोजने के लिए एक निब के माध्यम से लूप करना है। यह आदर्श नहीं है। और ऐसा लगता है कि आपके पास एक अच्छा समाधान है। –
क्या आप विस्तारित कर सकते हैं "ऐसा लगता है कि यह आपको फ़ाइल के मालिक को एक ज्ञात वर्ग में सेट करने की इजाजत देता है, न कि प्रोटोकॉल को लागू करने वाली आईडी के लिए?" क्या इसका मतलब अंतरफलक निर्माता है? – rooftop
@rooftop हां, "यह" उस मामले में इंटरफ़ेस बिल्डर को संदर्भित करता है। फ़ाइल के मालिक ऑब्जेक्ट को संपादित/कॉन्फ़िगर करते समय, एक "क्लास" विकल्प होता है जो आपको फ़ाइल के स्वामी के वर्ग का चयन करने की अनुमति देता है। आईबी में वह बॉक्स मुझे आईडी <कुछ प्रोटोकॉल> प्रकार के रूप में दर्ज करने की अनुमति नहीं दे रहा है, और मैं सोच रहा हूं कि यह संभव है या नहीं। धन्यवाद! – thauburger