2009-05-04 35 views
11

Điều này thật là đơn giản. Im thiếu một cái gì đó và im kiệt sức từ cố gắng sửa chữa nó. hy vọng ai đó có thể giúp đỡ.Iphone UIButton không hoạt động trong lồng nhau UIViews

Nút trong CharacterView.m hoạt động nhưng nút được lồng trong CharacterMale.m thì không. Tôi không sử dụng IB tất cả mọi thứ được thực hiện progmatically. Điều gì sẽ khiến một nút hoạt động và nút khác không hoạt động?

///////////////////////////////////////////////////////////////////////////////// 
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

Bạn có nghĩa là các nút của bạn ngừng hoạt động? Chúng được kích hoạt nhưng không gọi bộ chọn hoặc bạn không thể nhấp vào chúng? Ngoài ra làm thế nào để bạn móc chúng lên đến các bộ chọn? Nếu bạn đang sử dụng IB, hãy kiểm tra các cửa hàng và các kết nối – nduplessis

+1

Tôi không thể nhấp vào nút nào cả, không có gì xảy ra. Nếu tôi lấy lớp View, nút nằm ở ngoài bố mẹ của nó Xem nút công trình. Tôi không sử dụng IB. Tôi kết nối nút bằng cách sử dụng: [button addTarget: self action: @selector (ApplyImage :) forControlEvents: UIControlEventTouchUpInside]; Một lần nữa nó hoạt động tốt khi nó không được lồng vào một khung nhìn khác. –

+0

Tôi đã đăng tất cả 3 lớp. Ai đó có thể giúp đỡ? –

Trả lời

17

CUỐI CÙNG !!!!!!

Tôi phải bắt đầu tất cả các khung nhìn với initWithFrame và chuyển vào các khung hợp lệ. Init nên được sử dụng với bộ điều khiển và initWithFrame đi qua rects cho UIViews !!!!

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

@Roger Vì những người khác có thể có cùng một vấn đề. Bạn không chỉ xóa một câu hỏi khi nó được giải quyết ... – Emil

2

Chế độ xem mới có chấp nhận tương tác của người dùng không? Nói cách khác, userInteractionEnabled có được bật trên chế độ xem "Ký tự" không?

+0

Tôi nghĩ rằng tôi đã đọc userInteractionEnabled theo mặc định là YES. Tôi sẽ nghĩ trong tình huống này tôi sẽ tạo userInteractionEnabled = NO cho lớp CharactersView. Tôi nghĩ rằng quan điểm này bằng cách nào đó đang chặn nút trong lớp CharactersMale của tôi. Trong mọi trường hợp tôi đã thử và không có sự khác biệt. –

+1

Tôi có chế độ xem có chứa một loạt các nút. Tôi addXem một cái nhìn mới với một vài nút riêng của nó trên những cái đã có ở đó. Tất cả các nút hoạt động, bao gồm cả các nút giữa lớp đầu tiên và lớp thứ hai (trên cùng). Vì vậy, tôi bạn sẽ không có vấn đề làm tổ nút. Nhưng nếu tôi tắt userInteraction trong superLayer, tất cả các nút sẽ ngừng hoạt động. Nếu tôi chỉ tắt userInteraction trong lớp trên cùng, nó chỉ vô hiệu hóa nút trên lớp đó. Tiếp tục.Tôi đặt cược bạn sẽ tìm thấy một lỗi đơn giản hay như vậy. – mahboudz

17

Một điều cần xem xét là UIButton các bản xem trước đã được thêm UIImageView không hoạt động chút nào. Bạn cần tạo một UIView mà bạn thêm cả chế độ xem hình ảnh và các nút vào.

Điều này có thể do tương tác bị tắt theo mặc định trên chế độ xem hình ảnh, nhưng tôi chưa kiểm tra điều này.

+2

Kay, Cảm ơn lời khuyên của bạn. Tôi đặt UIImageView suerInteractionEnabled thành yes và nó hoạt động. –

+0

+1 cảm ơn bạn đã cảm ơn, đã giải quyết vấn đề kỳ lạ của tôi – Kalle

1

Tôi đã có một vấn đề tương tự khi cố gắng thêm nút trong khởi tạo của một UIView với một khung CGRectZero:

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

Khi tôi đã thay đổi khung để một hình chữ nhật thích hợp, nút làm việc:

@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

Tôi đã có may mắn với bộ chọn cho UIButton được tạo trong drawRect bằng cách sử dụng UIControlEventTouchDown thay vì số UIControlEventTouchUpInside phổ biến.

1

Đối với tôi vấn đề là do, nguồn gốc của khung nút lớn hơn khung hình chính.

Các vấn đề liên quan