2009-05-04 10 views
11

में काम नहीं कर रहा है यह बहुत आसान है मुझे यकीन है! मैं कुछ याद कर रहा हूं और इसे ठीक करने की कोशिश करने से थक गया हूं। उम्मीद है कि कोई मदद कर सकता है।आईफोन UIButton नेस्टेड UIViews

CharacterView.m में बटन काम करता है लेकिन CharacterMale.m में निहित बटन नहीं है। मैं आईबी का उपयोग नहीं कर रहा हूं सबकुछ व्यावहारिक रूप से किया जाता है। एक बटन को काम करने का कारण क्या होगा और अन्य नहीं?

///////////////////////////////////////////////////////////////////////////////// 
CharacterController.m 
///////////////////////////////////////////////////////////////////////////////// 
#import "CharacterController.h" 
#import "CharacterView.h" 

@implementation CharacterController 

- (id)init { 
    NSLog(@"CharacterController init"); 
    self = [ super init ]; 
    if (self != nil) { 
    } 
    return self; 
} 

- (void)loadView { 
    [ super loadView ]; 
    characterView = [ [ CharacterView alloc ] init]; 
    self.view = characterView; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
} 


- (void)dealloc { 
    [super dealloc]; 
} 

@end 

///////////////////////////////////////////////////////////////////////////////// 
CharacterView.m 
///////////////////////////////////////////////////////////////////////////////// 

#import "CharacterView.h" 
#import "CharacterMale.h" 

@implementation CharacterView 

- (id)initWithFrame:(CGRect)frame { 
    if (self = [super initWithFrame:frame]) { 
     characterMale = [ [ CharacterMale alloc ] init]; 
     [self addSubview: characterMale]; 

     UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
     button.frame = CGRectMake(0, 200, 200, 100); 
     [button setImage:[UIImage imageNamed:@"btnCharSelect.png"] forState:UIControlStateNormal]; 
     [button addTarget:self action:@selector(ApplyImage:) forControlEvents:UIControlEventTouchUpInside]; 
     [ self addSubview: button ]; 
    } 
    return self; 
} 

- (void)drawRect:(CGRect)rect { 
} 

-(void)ApplyImage:(id)sender 
{ 
    NSLog(@"CharacterView button works"); 
} 

- (void)dealloc { 
    [super dealloc]; 
} 

@end 

///////////////////////////////////////////////////////////////////////////////// 
CharacterMale.m 
///////////////////////////////////////////////////////////////////////////////// 

#import "CharacterMale.h" 
#import "CharacterController.h" 

@implementation CharacterMale 

- (id)init { 
    self = [ super init]; 
    if (self != nil) { 
     UIImage *image = [UIImage imageNamed:@"charMale.png"]; 
     imageView = [[ UIImageView alloc] initWithImage:image]; 
     [image release]; 
     [ self addSubview: imageView ]; 

     UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
     button.frame = CGRectMake(0, 0, 200, 100); 
     [button setImage:[UIImage imageNamed:@"btnCharSelect.png"] forState:UIControlStateNormal]; 
     [button addTarget:self action:@selector(ApplyImage:) forControlEvents:UIControlEventTouchUpInside]; 
     [ self addSubview: button ]; 

    } 
    return self; 
} 

-(void)ApplyImage:(id)sender 
{ 
    NSLog(@"CharacterMal button works"); 
} 

- (void)dealloc { 
    [super dealloc]; 
} 

@end 
+0

आपका मतलब क्या है कि आपके बटन काम करना बंद कर दें? क्या वे सक्षम हैं लेकिन चयनकर्ताओं को कॉल न करें या आप उन्हें बिल्कुल क्लिक नहीं कर सकते? आप उन्हें चयनकर्ताओं को कैसे लगाते हैं? यदि आप आईबी का उपयोग कर रहे हैं, तो आउटलेट और कनेक्शन – nduplessis

+1

देखें, मैं बटन पर क्लिक नहीं कर सकता, कुछ भी नहीं होता है। यदि मैं व्यू क्लास लेता हूं तो बटन अपने माता-पिता से बाहर स्थित होता है बटन को काम करता है। मैं आईबी का उपयोग नहीं कर रहा हूँ। मैं बटन का उपयोग करके कनेक्ट करता हूं: [बटन एडटेक्स्ट: स्वयं क्रिया: @ चयनकर्ता (लागू करें इमेज :) के लिए नियंत्रण नियंत्रण: UIControlEventTouchUpInside]; फिर यह ठीक काम करता है जब यह किसी अन्य दृश्य में घोंसला नहीं जाता है। –

+0

मैंने सभी 3 कक्षाएं पोस्ट कीं। क्या कोई मदद कर सकता है? –

उत्तर

17

अंतिम बार !!!!!!

मुझे initWithFrame के साथ सभी विचारों को init करना था और वैध फ्रेम rects में पास करना पड़ा। इनिट का उपयोग नियंत्रकों और initWithFrame UIViews के लिए गुजरने वाले रीक्ट्स के साथ किया जाना चाहिए !!!!

characterView = [ [ CharacterView alloc ] initWithFrame:CGRectMake(0, 0, 480, 320)]; 
then 
characterMale = [ [ CharacterMale alloc ] initWithFrame:frame]; 
+11

@Roger क्योंकि दूसरों को एक ही समस्या हो सकती है। जब आप इसे हल कर लेते हैं तो आप केवल एक प्रश्न नहीं हटाते हैं ... – Emil

2

क्या नया दृश्य उपयोगकर्ता इंटरैक्शन स्वीकार करता है? दूसरे शब्दों में, उपयोगकर्ता "इंटरैक्शन" सक्षम "अक्षरों" पर सक्षम है?

+0

मैंने सोचा कि मैंने उपयोगकर्ता को पढ़ा है इंटरफेक्शन डिफ़ॉल्ट रूप से सक्षम है हाँ। मैं इस स्थिति में सोचूंगा कि मैं CharterersView क्लास के लिए userInteractionEnabled = NO बनाउंगा। मुझे लगता है कि यह दृश्य किसी भी तरह से मेरे अक्षरों मेले वर्ग में बटन को अवरुद्ध कर रहा है। किसी भी मामले में मैंने कोशिश की और कोई फर्क नहीं पड़ता। –

+1

मेरे पास एक दृश्य है जिसमें बटन का एक समूह शामिल है। मैं वहां अपने कुछ बटनों के साथ एक नया दृश्य जोड़ता हूं जो वहां थे। सभी बटन काम करते हैं, जिनमें पहली परत और दूसरी (शीर्ष) परत के बीच शामिल हैं। तो मुझे आपको घोंसले बटनों में कोई समस्या नहीं होनी चाहिए। लेकिन अगर मैं सुपरलेयर में उपयोगकर्ता इंटरैक्शन बंद कर देता हूं, तो सभी बटन काम करना बंद कर देते हैं। अगर मैं केवल शीर्ष परत में उपयोगकर्ता इंटरैक्शन बंद कर देता हूं, तो उसने केवल उस परत पर बटन को अक्षम कर दिया है। इसे रखें।मुझे यकीन है कि आपको एक साधारण त्रुटि मिल जाएगी या नहीं। – mahboudz

17

विचार करने की एक और बात यह है कि UIButtonUIImageView जोड़े गए सबव्यूज़ बिल्कुल काम नहीं करते हैं। आपको UIView बनाने की आवश्यकता है जिसे आप छवि दृश्य और बटन दोनों जोड़ते हैं।

शायद यह इसलिए है क्योंकि छवि दृश्यों पर डिफ़ॉल्ट रूप से इंटरैक्शन बंद हो गया है, लेकिन मैंने इसे चेक नहीं किया है।

+2

Kay, सलाह के लिए धन्यवाद। मैंने UIImageView suerInteraction को हां में सक्षम किया और यह काम किया। –

+0

+1 धन्यवाद, धन्यवाद, मेरा अजीब मुद्दा हल किया – Kalle

1

मैं जब CGRectZero का एक फ्रेम के साथ एक UIView के प्रारंभ के दौरान बटन जोड़ने की कोशिश की एक ऐसी ही मुद्दा था: एक बार मैं एक उचित आयत को फ्रेम बदल

@implementation SomeView 
... 
- (id)initWithTitleImage:(UIImage *) newTitleImage { 
    // BROKEN: frame with CGRectZero. 
    self = [super initWithFrame:CGRectZero]; 
    if (self) { 
    UIButton *someButton = ...; 
    [self addSubview someButton]; 
    } 
} 

, बटन काम किया:

@implementation SomeView 
... 
- (id)initWithTitleImage:(UIImage *) newTitleImage { 
    // WORKING: frame with proper CGRect. 
    self = [super initWithFrame:CGRectMake(0, 0, 480, 320)]; 
    if (self) { 
    UIButton *someButton = ...; 
    [self addSubview someButton]; 
    } 
} 
1

मुझे लोकप्रिय UIControlEventTouchUpInside के बजाय UIControlEventTouchDown का उपयोग करके drawRect में बनाए गए UIButton के लिए चयनकर्ता के साथ भाग्य मिला है।

1

मेरे लिए समस्या उत्पन्न हुई थी क्योंकि बटन फ्रेम की उत्पत्ति पैरेंट फ्रेम के बाद बड़ी थी।