में कौन सा सेल बटन दबाया गया था, यह निर्धारित करने के लिए कि वर्तमान में मेरे पास एक UITableView है जो कस्टम UITableViewCell के साथ पॉप्युलेट किया गया है जो एक अलग निब में है। सेल में, कस्टम बटन क्लास में कार्रवाइयों के लिए वायर्ड किए गए दो बटन हैं। जब मैं बटनों में से एक पर क्लिक करता हूं, तो मैं उचित विधि कह सकता हूं, लेकिन मुझे यह जानने की जरूरत है कि बटन किस पंक्ति में दबाया गया था। प्रत्येक बटन के लिए टैग प्रॉपर्टी 0 के रूप में आ रही है। मुझे यह जानने की आवश्यकता नहीं है कि पूरे सेल कब चुना जाता है, बस जब कोई विशेष बटन दबाया जाता है, तो मुझे यह जानने की ज़रूरत है कि यह कौन सी पंक्ति है इसलिए मैं उचित वस्तु को अपडेट कर सकता हूं।आईफोन - कस्टम यूआईटीबल व्यूसेल
उत्तर
आप बटन पर tag
संपत्ति का उपयोग करके यह निर्दिष्ट कर सकते हैं कि बटन किस पंक्ति में बनाया गया था, यदि आप किसी और चीज़ के लिए टैग का उपयोग नहीं कर रहे हैं।
UITableViewCell
प्राप्त करने के लिए आप superview
बटन प्राप्त कर सकते हैं जिसमें आपका बटन होता है, लेकिन यदि आपको केवल पंक्ति संख्या की आवश्यकता है, तो आप tag
संपत्ति को पिछले पोस्ट डेसिरिज़ जैसे उपयोग कर सकते हैं।
[प्रेषक पर्यवेक्षक] का उपयोग करना; कस्टम सेल क्लास (जिसमें बटन के लिए क्रिया विधियां शामिल हैं) में मुझे एक UIView देता है, न कि सेल। अगर मैं cellForRowAtIndexPath विधि में टैग सेट करता हूं, तो दबाए जाने पर सेल में प्रत्येक बटन के लिए यह अभी भी 0 के रूप में आता है। –
यह सही है, आपको किसी अन्य पोस्ट द्वारा वर्णित [[प्रेषक पर्यवेक्षण] पर्यवेक्षण] का उपयोग करने की आवश्यकता है ... यह तब सेल है जिसमें UIView है, जिसमें आपका बटन शामिल है। – h4xxr
यहां एक अच्छा समाधान है: http: //www.71squared।कॉम/2008/12/कस्टम-बटन-इन-यूटेबलव्यूसेल-इंडेक्सपाथ/ – DixieFlatline
मेरे पास एक ही परिदृश्य है। इसे प्राप्त करने के लिए, मैंने एक कस्टम सेल लिया। मैंने दो गुण, खंड और पंक्ति जोड़ा। मैंने एक मालिक भी जोड़ा, जो मेरा व्युत्पन्न TableViewController क्लास होगा। जब कोशिकाओं से पूछा जा रहा है, तो मैं मालिक के साथ इंडेक्सपाथ के आधार पर अनुभाग/पंक्ति सेट करता हूं।
cell.section = indexPath.section cell.row = indexPath.row cell.owner = आत्म
अगले बात यह है कि मैंने किया था जब मैं बटन बनाया है, मैं बटन घटनाओं सेल के साथ संबद्ध tableViewController के बजाय। इवेंट हैंडलर अनुभाग और पंक्ति प्रविष्टि पढ़ सकता है और उचित संदेश (या घटना) को TableViewController पर भेज सकता है। यह मौजूदा तरीकों और हाउसकीपिंग का लाभ उठाकर और सेल को जितना संभव हो सके स्वयं को रखकर घर की देखभाल और रख-रखाव को बहुत सरल बनाता है। चूंकि सिस्टम पहले से ही कोशिकाओं का ट्रैक रखता है, यह दो बार क्यों करता है!
के लिए बहुत आसान समाधान है (आईडी) प्रेषक के साथ अपने बटन कॉलबैक को परिभाषित करें और तालिका पंक्ति अनुक्रमणिका को खोदने के लिए इसका उपयोग करें। आप का इस्तेमाल किया है कि एक ही पंक्ति सूचकांक/बनाने सेल को भरने, तो यह आपके बटन अब क्या करना चाहिए क्या पहचान करने के लिए तुच्छ होना चाहिए करने के लिए
- (IBAction)buttonWasPressed:(id)sender
{
NSIndexPath *indexPath =
[self.myTableView
indexPathForCell:(UITableViewCell *)[[sender superview] superview]];
NSUInteger row = indexPath.row;
// Do something with row index
}
सबसे अधिक संभावना: यहां कुछ नमूना कोड है। टैग के साथ खेलने की जरूरत नहीं है और उन्हें क्रम में रखने की कोशिश करें!
स्पष्टीकरण: यदि आप वर्तमान में - (IBAction) बटन का उपयोग करते हैं; बस इसे - (IBAction) बटन के रूप में फिर से परिभाषित करें दबाया गया: (आईडी) प्रेषक; अतिरिक्त कॉलबैक तर्क वहां है, इसे प्राप्त करने के लिए कुछ भी करने की आवश्यकता नहीं है। इंटरफेस बिल्डर में अपने बटन को नए कॉलबैक में फिर से कनेक्ट करना भी याद रखें!
बेशक आप कोशिकाओं का पुन: उपयोग करते हैं, अगर केस का उपयोग करने की अनुमति मिलती है! अन्यथा चीजें वास्तव में जटिल हो सकती हैं। वैसे भी, तालिका में जोड़ा गया पहला पंक्ति "दृश्य पहली पंक्ति" होगी। क्षमा करें, मुझे इसके साथ कोई समस्या नहीं है? – JOM
मेरे अकेला "पुन: उपयोग कक्ष" टिप्पणी के लिए स्पष्टीकरण। यह एक और टिप्पणी का जवाब था, जिसे अब किसी ने हटा दिया है। मुझे इसके लिए भी एक वोट मिला! कोई चिंता नहीं, मैं जीवित रहूंगा :) – JOM
मैंने इस क्रिया की सामग्री को पकड़ लिया है कि यह पता लगाने के लिए कि कौन सा बटन UITableView सेल को सेगु के लिए बुलाया गया है। यह तकनीक भी महान है! – jerwood
भी आसान:
-(IBAction) buttonPressed {
NSIndexPath *myIndexPath = [(UITableView *)self.superview indexPathForCell: self];
// do whatever you need to do with the information
}
समस्या को ठीक करने के लिए कई तरीकों रहे हैं।
- आप "टैग" संपत्ति का उपयोग कर सकते हैं बटन के लिए टैग मान के रूप में value indexPath.row दें।
btn.tag = indexPath।पंक्ति;
फिर बटन फ़ंक्शन में, आप आसानी से टैग मान तक पहुंच सकते हैं और यह क्लिक किए गए बटन के लिए सूचकांक होगा।
-(void)btnClicked:(id)sender
{
int index = [sender tag];
}
आप परत संपत्ति का उपयोग कर सकते indexPath परत शब्दकोश में मूल्य के रूप में।
[[बीटीएन परत] सेट वैल्यू: इंडेक्सपाथ फॉरके: @ "इंडेक्सपाथ"];
यह अनुक्रमणिकापैथ बटन क्रिया फ़ंक्शन से पहुंच योग्य है।
-(void)btnClicked:(id)sender
{
NSIndexPath *indexPath = [[sender layer] valueForKey:@"indexPath"];
int index = indexPath.row;
}
इस विधि के साथ आप अलग-अलग कुंजी के साथ शब्दकोश में नई ऑब्जेक्ट्स जोड़कर बटन फ़ंक्शन में एकाधिक मान पास कर सकते हैं।
एक कार्यान्वयन कि टैग या दृश्य पदानुक्रम पर निर्भर नहीं है के लिए निम्न उपाय अपनाते हैं
- (void)btnPressed:(id)sender event:(id)event
{
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchPoint = [touch locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:touchPoint];
}
[btnFavroite setAccessibilityValue:[NSString stringWithFormat:@"%d",indexPath.row]];
[btnFavroite setAccessibilityLabel:btnFavroite.titleLabel.text];
[btnFavroite addTarget:self action:@selector(btnFavClick:) forControlEvents:UIControlEventTouchUpInside];
-(void)btnFavClick:(id)sender{
UIButton *btn=(UIButton *)sender;
int index=[btn.accessibilityValue integerValue]]
}
इस समाधान भी IBAction में काम करता है स्टोरीबोर्ड सेल प्रोटोटाइप
- (IBAction)viewMapPostsMarker:(UIButton*)sender{
// button > cellContentView > cellScrollView > cell
UITableViewCell *cell = (UITableViewCell *) sender.superview.superview.superview;
NSIndexPath *index = [self.mapPostsView indexPathForCell:cell];
NSLog(@" cell at index %d",index.row);
}
का उपयोग कर यहाँ एक है जुड़ा हुआ स्विफ्ट उदाहरण ...
यूआईसीओन्ट्रोल क्लास विभिन्न आईओएस चौराहे का सुपरक्लास है टीआई, यूआईबटन सहित, क्योंकि यूआईसींट्रोल लक्ष्य/क्रिया तंत्र प्रदान करता है जो घटना अधिसूचनाएं भेजता है। इसलिए इसे संभालने का एक सामान्य तरीका निम्नानुसार है:
func actionHandler(control: UIControl)
var indexPath = tableView.indexPathForCell(control.superview!.superview! as UITableViewCell)!
var row = indexPath.row
}
कार्रवाई देने के लिए बटन नियंत्रण स्थापित करने का एक उदाहरण यहां दिया गया है। वैकल्पिक रूप से, एक @IBAction बनाएं और इंटरफ़ेस बिल्डर के साथ दृश्य रूप से क्रिया बनाएं।
button.addTarget(self, action: "actionHandler:", forControlEvents: .TouchUpInside)
आप UIButton, UIStepper, आदि के लिए UIControl पैरामीटर को कम कर सकते हैं ... आवश्यकतानुसार। उदाहरण के लिए:
var button = control as UIButton
नियंत्रण के superview UITableViewCell के contentView, जिसका subviews UIViews सेल में दिखाया गया हैं (UIControl UIView का एक उपवर्ग है)। सामग्री सेल का पर्यवेक्षण UITableViewCell स्वयं ही है। यही कारण है कि यह एक विश्वसनीय तंत्र है और पर्यवेक्षकों को दंड के साथ पार किया जा सकता है।
भयानक उत्तर के लिए धन्यवाद! यह एक ही पंक्ति में 'UITableView' में एकाधिक बटन के साथ काम करता है! –
- 1. असीमित यूआईटीबल व्यूसेल छवि जीसीडी
- 2. क्लिप टॉबाउंड्स और मास्क समूहबद्ध यूआईटीबल व्यूसेल
- 3. कस्टम यूआईटीबल व्यू डायनामिक सेल ऊंचाई
- 4. टाइप यूआईटेबल व्यूसेल
- 5. आईफोन कस्टम स्क्रॉलव्यू सूचक
- 6. आईफोन के लिए कस्टम iCarousel?
- 7. आईफोन सिम्युलेटर कस्टम सीए प्रमाणपत्र
- 8. कस्टम आईफोन रिटर्न कुंजी टेक्स्ट
- 9. स्टोरीबोर्ड सेग्यू को यूआईटीबल व्यू के डीसेक्लेरो
- 10. आईफोन एसडीके में कस्टम गतिविधि संकेतक बनाएँ?
- 11. कस्टम सीमा रंग के साथ UIButton, आईफोन
- 12. कस्टम कीबोर्ड बनाएं और इसे अपने आईफोन
- 13. आईफोन ऐप में कस्टम UIAlertView कैसे बनाएं
- 14. आईफोन
- 15. आईफोन: टैबव्यू + टेबल व्यू
- 16. आईफोन
- 17. आईफोन
- 18. आईफोन
- 19. ऑटो-रीसाइज यूआईटीबल व्यू हेडर ऑन रोटेट (अधिकतर आईपैड पर)
- 20. मेरा ऐप क्रैश क्यों हो रहा है? यूआईटीबल और कंट्रोलर
- 21. यूआईटीबल व्यू स्क्रॉलिंग को किस पंक्ति में गणना करेगा?
- 22. यूआईटीबल सेल चयन योग्य नहीं है जहां सेल
- 23. आईफोन
- 24. कस्टम UITableViewCell
- 25. आईफोन
- 26. आईफोन
- 27. आईफोन
- 28. आईफोन
- 29. कस्टम आईफोन कैमरा नियंत्रण (UIImagePickerController का उपयोग नहीं)
- 30. आईफोन - इंटरफेस बिल्डर के लिए कस्टम ऑब्जेक्ट्स बनाना?
क्या मुझे cellForRowAtIndexPath विधि में टैग सेट करने की आवश्यकता है, और फिर बटन दबाए जाने पर इसे एक्सेस करें? –
हां, यह सबसे अच्छी विधि है। – Jason
इसे लंबे समय से ढूंढ रहा था, क्योंकि मैं भी नौसिखिया हूं। अच्छी सलाह के लिए धन्यवाद @ pix0r। – Jonauz