किसी NSIndexpath.row
और के बीच अंतर पता है NSIndexpath.item
?
विशेष रूप से, मैं किसका उपयोग करता हूं:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
जवाबों:
ठीक है, किसी ने भी यहां अच्छा जवाब नहीं दिया।
NSIndexPath के अंदर, अनुक्रमणिका को "_indexes" नामक एक साधारण सी सरणी में संग्रहीत किया जाता है जिसे NSUInteger * के रूप में परिभाषित किया गया है और सरणी की लंबाई "_length" में NSUInteger के रूप में परिभाषित की गई है। एक्सेसर "खंड" "_indexes [0]" का उपनाम है और दोनों "आइटम" और "पंक्ति" उपनाम "_indexes [1]" हैं। इस प्रकार दोनों कार्यात्मक रूप से समान हैं।
प्रोग्रामिंग शैली के संदर्भ में - और शायद परिभाषा श्रृंखला - आप तालिकाओं के संदर्भ में "पंक्ति", और संग्रह के संदर्भ में "आइटम" का उपयोग करना बेहतर होगा।
indexPath.row is best in your case
NSIndexPath के बारे में पहली जानकारी
NSIndexPath
वर्ग नेस्टेड सरणी संग्रह में से एक पेड़ में एक विशिष्ट नोड के लिए पथ का प्रतिनिधित्व करता है। इस पथ को अनुक्रमणिका पथ के रूप में जाना जाता है।
एक IndexPath में प्रत्येक सूचकांक पेड़ में एक नोड से दूसरे, गहरे नोड में बच्चों के एक सरणी में सूचकांक का प्रतिनिधित्व करता है।
उदाहरण के लिए , IndexPath 1.4.3.2 चित्र में दिखाए गए पथ को निर्दिष्ट करता है
यहाँ आपके मामले indexPath.row
में विशिष्ट पर पंक्ति का सूचकांक लौटाता है indexPath
।
बीच के भेद indexPath.row and indexPath.item
आम तौर indexPath
पर दो गुण होते हैं
1 - पंक्ति
2 - आइटम
row - indexPath पर UITableView
विशिष्ट पंक्ति आधार पाने के लिए संपत्ति का उपयोग । यह भी केवल संपत्ति पढ़ी जाती है
Available in iOS 2.0 and later.
आइटम - अनुभाग में आइटमUICollectionView
प्राप्त करने के लिए ठीक से उपयोग करें । यह केवल पढ़ने के लिए संपत्ति है। इस संपत्ति का उपयोग करने के लिए आपको इसे UICollectionView.h में घोषित करना होगा
> Available in iOS 6.0 and later.
NSIndexPath
।
आपको उपयोग करने की आवश्यकता है indexPath.row
अंतर यह है कि:
indexPath.row tableView के लिए है और indexPath.item संग्रह दृश्य के लिए है ।
मद
एक इंडेक्स नंबर एक संग्रह दृश्य के एक खंड में एक आइटम की पहचान। (सिफ़ पढ़िये)
@property (nonatomic, readonly) NSInteger item;
विचार-विमर्श
आइटम जिस अनुभाग में है, उसे अनुभाग के मान से पहचाना जाता है। उपलब्धता
Available in iOS 6.0 and later.
UICollectionView.h में घोषित किया गया
पंक्ति
एक सूचकांक संख्या एक तालिका दृश्य के एक खंड में एक पंक्ति की पहचान। (सिफ़ पढ़िये)
@property(nonatomic, readonly) NSInteger row;
विचार-विमर्श
जिस अनुभाग में पंक्ति है, उसे अनुभाग के मान से पहचाना जाता है। उपलब्धता
Available in iOS 2.0 and later.
कृपया विवरण के लिए NSIndexPath परिवर्धन की जाँच करें
@ ओवेन गॉडफ्रे का जवाब @iPatel के स्वीकृत जवाब से बेहतर है। यहाँ कुछ और स्पष्टीकरण दिए गए हैं, जो मैं उनके उत्तर पर टिप्पणी करने में सक्षम नहीं था, इसलिए मैं उनके उत्तर की प्रतिलिपि बनाकर यहाँ जोड़ दूंगा। श्रेय ओवेन का है।
@ ओवेन गॉडफ्रे से:
NSIndexPath के अंदर, अनुक्रमणिका को "_indexes" नामक एक साधारण सी सरणी में संग्रहीत किया जाता है जिसे NSUInteger * के रूप में परिभाषित किया गया है और सरणी की लंबाई "_length" में NSUInteger के रूप में परिभाषित की गई है। एक्सेसर "खंड" "_indexes [0]" के लिए एक उपनाम है और दोनों "आइटम" और "पंक्ति" उपनाम "_indexes 1 " के लिए हैं। इस प्रकार दोनों कार्यात्मक रूप से समान हैं।
प्रोग्रामिंग शैली के संदर्भ में - और शायद परिभाषा श्रृंखला - आप तालिकाओं के संदर्भ में "पंक्ति", और संग्रह के संदर्भ में "आइटम" का उपयोग करना बेहतर होगा।
NSIndexPath का मुख्य इंटरफ़ेस NSIndexPath.h में परिभाषित किया गया है। इंडेक्स का संग्रहण _indexes में है जो NSUInteger का एक निजी एक आयामी सरणी है। NSIndexPath अपने आप में कई आयामों का प्रतिनिधित्व कर सकता है। NSIndexPath पर दो प्रासंगिक श्रेणियां हैं जो कार्यक्षमता का विस्तार करती हैं, एक UICollectionView.h "NSIndexPath (UICollectionViewAdditions)" और एक UITableView.h "NSIndexPath (UITableView)" से। UICollectionView.h से एक आसानी से संपत्ति "आइटम" और संबंधित सुविधा विधियों को जोड़ता है। UITableView.h से एक आसानी से संपत्ति "पंक्ति" और संबंधित सुविधा विधियों को जोड़ता है। हालाँकि दोनों गुण केवल रैपर हैं जो _indexes [1] में अंतर्निहित मूल्य तक पहुँचते हैं।
चूंकि UIKit दोनों श्रेणियों के साथ लिंक करता है, सुविधा कार्यों के दोनों सेट हमेशा उपलब्ध होते हैं, कोई फर्क नहीं पड़ता कि IOS में आप उनका उपयोग कहां कर रहे हैं। इसलिए आप [NSIndexPath IndexPathForRow: inSection:] से एक NSIndexPath बना सकते हैं, लेकिन indexPath.item से दूसरा इंडेक्स प्राप्त करते हैं। अंतर्निहित मान बिल्कुल वैसा ही है, जैसे indexPath.item या indexPath.row द्वारा एक्सेस किया गया है।
यदि आप UICollectionView के साथ "आइटम" का उपयोग करते हैं और UITableView के साथ "पंक्ति" का उपयोग करते हैं, तो यह क्लीनर है, जैसा कि उनका उपयोग करने का इरादा था, और यह अधिक पठनीय कोड के लिए बनाता है। हालाँकि, यदि आप उन्हें इंटरचेंज करते हैं तो आपका प्रोग्राम क्रैश नहीं होगा।
संदर्भ: NSIndexPath
UICollectionView.h के नीचे देखें और आपको वह श्रेणी दिखाई देगी जो item
USIollectionView उदाहरणों के लिए उपयोग किए जाने पर एक संपत्ति के रूप में जोड़ने के लिए NSIndexPath का विस्तार करती है ।
UITableView.h के तल पर एक समान अनुभाग है जो NSIndexPaths के लिए जोड़ता है row
और section
गुण जो UITableViews में उपयोग किए जाते हैं।
यदि आप एक वर्ग के भीतर NSIndexPath उदाहरण के इन गुणों को एक्सेस करने का प्रयास कर रहे हैं और NSIndexPathInstance को विश्वास नहीं है कि वे वहां हैं, तो उस वर्ग के शीर्ष लेख को आयात करें जो उन्हें आपकी कक्षा के शीर्ष में परिभाषित करता है और आप जादुई रूप से उपयोग करने में सक्षम होंगे इन गुणों।
UICollectionView.h
@interface NSIndexPath (UICollectionViewAdditions)
+ (instancetype)indexPathForItem:(NSInteger)item inSection:(NSInteger)section NS_AVAILABLE_IOS(6_0);
@property (nonatomic, readonly) NSInteger item NS_AVAILABLE_IOS(6_0);
@end
UITableView.h
//_______________________________________________________________________________________________________________
// This category provides convenience methods to make it easier to use an NSIndexPath to represent a section and row
@interface NSIndexPath (UITableView)
+ (instancetype)indexPathForRow:(NSInteger)row inSection:(NSInteger)section;
@property (nonatomic, readonly) NSInteger section;
@property (nonatomic, readonly) NSInteger row;
@end
अपनी कक्षा के भीतर इन गुणों का उपयोग करने के लिए आपको अपनी कक्षा में वांछित को आयात करना होगा जैसे:
@import "UIKit/UITableView.h"
और फिर आप जैसे काम कर सकते हैं: myIndexPath.row
और[myIndexPath row]
row
द्वारा उपयोग किया जाता हैUITableView
;item
द्वारा किया जाता हैUICollectionView
कोशिकाओं।