मैं एक कस्टम प्रतिनिधि को मेरे कस्टम यूआईटीबल व्यूसेल में जोड़ने की कोशिश कर रहा हूं।एक कस्टम UITableViewCell (खराब पहुंच त्रुटि) में एक प्रतिनिधि जोड़ना
इस सेल पर मेरे पास एक बटन है जिसे ViewController में एक विधि को आग लगाने की आवश्यकता है जहां UITableView चालू है।
मैं कस्टम प्रतिनिधि जोड़ने के लिए सभी सामान्य कदम उठा रहा हूं लेकिन कुछ कारणों से जब मैं रनटाइम पर वीसी खोलता हूं तो ऐप क्रैश हो जाता है और मुझे खराब पहुंच त्रुटि देता है।
जब मैं सभी प्रतिनिधि कोड पर टिप्पणी करता हूं तो यह ठीक से काम करता है इसलिए मेरा अनुमान है कि मैं अपने प्रतिनिधि को जोड़ने का तरीका गलत हूं। जब मैं अपनी आईडी संपत्ति को असम्बद्ध छोड़ देता हूं तो यह दुर्घटनाग्रस्त लगता है।
मैं वीसी में प्रोटोकॉल को लागू करता हूं। मैंने सेलफोर एट इंडेक्सपैथ में सेल को प्रतिनिधि को असाइन किया था:। सभी प्रतिनिधि विधियां जगह पर हैं। मैं अन्य वर्गों में समान निर्माण का उपयोग कर रहा हूं लेकिन पहले कभी UITableViewCells के उप-वर्ग में नहीं।
कुछ कोड पोस्ट करने से पहले मैं जानना चाहूंगा कि किसी को इससे पहले इस बग का सामना करना पड़ा था या नहीं। यदि उसने और कैसे हल किया है या यदि UITableViewCell सबक्लास के लिए कस्टम प्रतिनिधि बनाना भी संभव है।
संपादित करें:
मेरे customCell.h
#import <UIKit/UIKit.h>
@class MyTableViewCell;
@protocol MyTableCellProtocoll <NSObject>
-(void) didPressButton:(MyTableViewCell *)theCell;
@end
@interface MyTableViewCell : UITableViewCell
{
UIButton *myButton;
id<MyTableCellProtocoll> delegationListener;
}
@property (nonatomic,retain) UIButton *myButton;
@property (nonatomic,assign) id<MyTableCellProtocoll> delegationListener;
- (void) buttonAction;
@end
मीटर
#import "MyTableViewCell.h"
@implementation MyTableViewCell
@synthesize myButton;
@synthesize delegationListener;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
self.myButton = [UIButton buttonWithType:UIButtonTypeCustom];
self.myButton.backgroundColor = [UIColor clearColor];
self.myButton.frame = CGRectMake(5, 0, 10, 32);
self.myButton.titleLabel.adjustsFontSizeToFitWidth = YES;
[self.myButton addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];
[self.contentView addSubview:self.myButton];
}
return self;
}
- (void) buttonAction
{
NSLog(@"buttonpressed");
[self.delegationListener didPressButton:self];
}
@end
MyVC ज में उचित रूप में प्रतिनिधि को लागू करता है
@interface MyVC : UIViewController <UITableViewDelegate, UITableViewDataSource, MyTableCellProtocoll>
और यह भी मीटर
- (void)didPressButton:(MyTableViewCell *)theCell
{
NSLog(@"didPressButton");
}
मैं cellForRowAtIndexPath में किसी प्रकार में MyTableCellProtocoll से एक delegatemethod उपयोग करता है:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.delegationListener = self;
}
return cell;
}
इन सभी स्थानों मैं प्रतिनिधि के लिए उपयोग कर रहे हैं। मैं इसे क्या करना चाहता हूं वह बटंटिटल बदलें और उस सेल (संशोधित डुप्लिकेट) के बाद कुछ पंक्तियां डालें
आशा है कि यह चीजों को थोड़ा और साफ़ कर देगा।
EDIT2: बटन विधि शुरू में बुलाया जा रहा है नहीं है के रूप में टिप्पणी अनुभाग में metioned किया गया था। लॉगकोड के साथ संपादित कोड।
EDIT3: बटन के साथ गलत कुछ भी नहीं है। यह प्रतिनिधि संपत्ति है जो कहीं गड़बड़ है। ब्रेकपॉइंट्स और लॉग और टिप्पणी के साथ मैंने इसके बारे में सुनिश्चित किया।
कोड मेरे डेटा स्रोत सूची में अंतिम तत्व तक चलाया जा रहा है तो यह क्रैश हो जाता है। अब समस्या के करीब 1 कदम मुझे लगता है।
अंतिम संपादन: ठीक है, इसे प्रतिनिधियों और बटन और अन्य घटकों के सभी की तरह लगता है सब पर समस्या नहीं थे। यह ऊंचाई थी ForRowAtIndexPath: मुझे खराब कर रहा है। किसी भी तरह से आपके सभी समर्थन के लिए धन्यवाद!
कोड के बिना टिप्पणी नहीं कर सकता। लेकिन हां, एक UITableViewCell एक UIViewController को प्रतिनिधि के रूप में उपयोग कर सकता है - आपकी समस्या प्रतिनिधियों के मानक गलत उपयोग की तरह लगती है। और ... निर्भरता के आधार पर प्रतिनिधिमंडल सबसे अच्छा समाधान नहीं हो सकता है। –
कोई कारण नहीं है कि एक प्रतिनिधि प्रोटोकॉल और आईडी ivar को NSObject सबक्लास (जो UITableViewCell है) –
jbat100
@PaulLynch में बनाना असंभव क्यों होना चाहिए: मैंने अपने कुछ कोड के साथ प्रश्न संपादित किया। इन स्थानों में मेरे प्रतिनिधि कार्यों का उपयोग है। आशा करता हूँ की ये काम करेगा। –