2010-06-07 16 views
5

मैं कोको स्पर्श में एक कस्टम दृश्य बनाता हूं जो UIView द्वारा सुपरक्लास किया गया है और मेरे मुख्य नियंत्रक में मैं इसे प्रारंभ करता हूं और फिर इसे मुख्य दृश्य में एक सबव्यूव के रूप में जोड़ता हूं, लेकिन जब मैं इसे जोड़ता हूं मुख्य दृश्य यह मेरी प्रारंभिक विधि को दोबारा कॉल करता है और अनंत लूप का कारण बनता है। क्या मैं अपना कस्टम व्यू गलत बनाने जा रहा हूं? यहाँ mainViewकोको टच: कस्टम व्यू बनाना और जोड़ना

- (void)loadView { 
    UIImage* tempImage = [UIImage imageNamed: @"image1.jpg"]; 
    CustomImageContainer *testImage = [[CustomImageContainer alloc] initWithImage: tempImage andLabel: @"test image" onTop: true atX: 10 atY: 10]; 
    [self.view addSubview: testImage]; 
} 

और CustomImageContainer है

-(CustomImageContainer *) initWithImage: (UIImage *)imageToAdd andLabel: (NSString *)text onTop: (BOOL) top atX: (int) x_cord atY: (int) y_cord{ 
    UIImageView *imageview_to_add = [[UIImageView alloc] initWithImage: imageToAdd]; 
    imageview_to_add.frame = CGRectMake(0, 0, imageToAdd.size.width, imageToAdd.size.height); 
    UILabel *label_to_add = [[UILabel alloc] init]; 
    label_to_add.text = text; 
    label_to_add.alpha = 50; 
    label_to_add.backgroundColor = [UIColor blackColor]; 
    label_to_add.textColor = [UIColor whiteColor]; 
    [self addSubview: imageview_to_add]; 
    self.frame = CGRectMake(x_cord, y_cord, imageToAdd.size.width, imageToAdd.size.height); 
    if (top) { 
     label_to_add.frame = CGRectMake(0, 0, imageview_to_add.frame.size.width, imageview_to_add.frame.size.height); 
     //[self addSubview: label_to_add]; 
    } 
    else { 
     label_to_add.frame = CGRectMake(0,.2 * imageview_to_add.frame.size.height, imageview_to_add.frame.size.width, imageview_to_add.frame.size.height); 
    } 
    [self addSubview: label_to_add]; 
    [super init]; 
    return self; 
} 

उत्तर

1

क्यों आप प्रारंभकर्ता के अंत में [super init] बयान रखा है? जब subclassing, आप आमतौर पर विधि की शुरुआत में इस कथन डाल दिया।

UIView सबक्लास के लिए, कोड में विचार बनाते समय नामित प्रारंभकर्ता initWithFrame: है, इसलिए आपको लेबल और छवि जोड़ने से पहले इसे कॉल करना चाहिए। आप कस्टम व्यू द्वारा आवश्यक फ्रेम की गणना करने के लिए छवि का उपयोग कर सकते हैं।

-(CustomImageContainer *) initWithImage: (UIImage *)imageToAdd andLabel: (NSString *)text onTop: (BOOL) top atX: (int) x_cord atY: (int) y_cord{ 
    // The view will gets its frame to the size of the image 
    UIImageView *imageview_to_add = [[UIImageView alloc] initWithImage: imageToAdd]; 

    // Call the designated initializer 
    CGRect frame = CGRectMake(x_cord, y_cord, imageToAdd.size.width, imageToAdd.size.height); 
    self = [super initWithFrame:frame]; 

    [self addSubview: imageview_to_add]; 

    UILabel *label_to_add = [[UILabel alloc] init]; 
    label_to_add.text = text; 
    label_to_add.alpha = 50; 
    label_to_add.backgroundColor = [UIColor blackColor]; 
    label_to_add.textColor = [UIColor whiteColor]; 

    if (top) { 
     label_to_add.frame = CGRectMake(0, 0, imageview_to_add.frame.size.width, imageview_to_add.frame.size.height); 
    } 
    else { 
     label_to_add.frame = CGRectMake(0,.2 * imageview_to_add.frame.size.height, imageview_to_add.frame.size.width, imageview_to_add.frame.size.height); 
    } 
    [self addSubview: label_to_add]; 

    return self; 
} 

आप अभी भी एक अनंत लूप है, डिबगर रोक सकते हैं और स्टैक ट्रेस में बार-बार होने विधि पैटर्न की खोज। यह पैटर्न आपको बताएगा कि कोड अनंत लूप में प्रवेश करता है।

+0

Thansk यह समस्या का हिस्सा था, दूसरा हिस्सा यह था कि मेरे पास लोड में था दृश्य देखें नहीं, लेकिन यह अविश्वसनीय रूप से आपको बहुत धन्यवाद – AgentRegEdit

संबंधित मुद्दे