2012-06-16 41 views
7

Đây là mảnh của tôi về mã tạo nút lập trình:Làm thế nào để Thiết lập hình nền riêng cho nhóm của UIButtons bởi lập trình

NSArray *buttonImage=[NSArray arrayWithObjects:[UIImage imageNamed:@"Cover_0.png"], 
         [UIImage imageNamed:@"Cover_1.png"], 
         [UIImage imageNamed:@"Cover_2.png"], 
         [UIImage imageNamed:@"Cover_3.png"], 
         [UIImage imageNamed:@"Cover_4.png"], 
         [UIImage imageNamed:@"Cover_5.png"], 
         [UIImage imageNamed:@"Cover_6.png"], 
         [UIImage imageNamed:@"Cover_7.png"],nil]; 

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
button.frame = CGRectMake(0, 0, 200.0f, 200.0f); 
[button setTitle:[NSString stringWithFormat:@"%i", index] forState:UIControlStateNormal]; 
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
button.titleLabel.font = [button.titleLabel.font fontWithSize:50]; 

[button setImage:buttonImage forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside]; 
return button; 

Nhưng khi chạy nó, tôi không thể có được trong mô phỏng và ném nó một Sigabart Signal lỗi. Có ai giúp được không?

Trả lời

7

Để tạo nút lập trình sử dụng hàng loạt các selectors bạn có thể sử dụng đoạn mã này:

// xác định Chiến lược

@interface DataItemStrategy : NSObject 
@property(nonatomic, assign) SEL someSelector; 
@end 

@implementation DataItemStrategy 

@synthesize someSelector = _someSelector; 

-(id)initWithSelector:(SEL)someSelector 
{ 
    self = [super init]; 
    if (self) 
    { 
     self.someSelector = someSelector; 
    } 
    return self; 
} 

@end 


-(void)createButtons 
{ 
    NSArray *buttonImages =[NSArray arrayWithObjects:[UIImage imageNamed:@"Cover_0.png"], 
          [UIImage imageNamed:@"Cover_1.png"], 
          [UIImage imageNamed:@"Cover_2.png"],nil]; 

    NSArray *dataStrategies = [NSArray arrayWithObjects: 
            [[[DataItemStrategy alloc] initWithSelector:@selector(buttonAction0:)] autorelease], 
            [[[DataItemStrategy alloc] initWithSelector:@selector(buttonAction1:)] autorelease], 
            [[[DataItemStrategy alloc] initWithSelector:@selector(buttonAction2:)] autorelease], nil]; 

    CGRect buttonFrame = CGRectMake(0, 0, 50, 50); 
    for (NSInteger i = 0; i < [buttonImages count]; i++) 
    { 
     buttonFrame.origin.y += 50; 
     UIImage *buttonImage = [buttonImages objectAtIndex:i]; 
     DataItemStrategy *dataStrategie = [dataStrategies objectAtIndex:i]; 
     NSString *title = [NSString stringWithFormat:@"%d", i]; 
     UIButton *button = [self buttonWithFrame:buttonFrame image:buttonImage action:dataStrategie.someSelector title:title]; 
     [self.view addSubview:button]; 
    }  
} 

-(UIButton *)buttonWithFrame:(CGRect)buttonFrame image:(UIImage *)buttonImage action:(SEL)buttonAction title:(NSString *)title 
{ 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    button.frame = buttonFrame; 
    [button setTitle:title forState:UIControlStateNormal]; 
    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
    button.titleLabel.font = [button.titleLabel.font fontWithSize:50]; 

    [button setImage:buttonImage forState:UIControlStateNormal]; 
    [button addTarget:self action:buttonAction forControlEvents:UIControlEventTouchUpInside]; 
    return button; 
} 
1

Sửa đổi mã như dưới đây để thiết lập hình ảnh đầu tiên để nút/bạn có thể sử dụng cho vòng lặp để tạo ra và thiết lập hình ảnh để uibuttons

NSArray *buttonImage=[NSArray arrayWithObjects:[UIImage imageNamed:@"Cover_0.png"], 
        [UIImage imageNamed:@"Cover_1.png"], 
        [UIImage imageNamed:@"Cover_2.png"], 
        [UIImage imageNamed:@"Cover_3.png"], 
        [UIImage imageNamed:@"Cover_4.png"], 
        [UIImage imageNamed:@"Cover_5.png"], 
        [UIImage imageNamed:@"Cover_6.png"], 
        [UIImage imageNamed:@"Cover_7.png"],nil]; 

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
button.frame = CGRectMake(0, 0, 200.0f, 200.0f); 
[button setTitle:[NSString stringWithFormat:@"%i", index] forState:UIControlStateNormal]; 
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
button.titleLabel.font = [button.titleLabel.font fontWithSize:50]; 

[button setImage:(UIImage*)[buttonImage objectAtIndex:1] forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside]; 
return button; 

thay đổi dòng

[button setImage:(UIImage*)[buttonImage objectAtIndex:1] forState:UIControlStateNormal]; 

này sẽ thiết lập hình ảnh để nút . Bạn đã gửi một mảng để đặt hình ảnh để ứng dụng sẽ gặp sự cố

+0

: tks ... nhưng nếu tôi đặt như ObjectAtIndex là 1 chỉ Cover_1.png được đặt cho tất cả các hình ảnh nhưng tôi cần mỗi hình ảnh nhưng có hình nền riêng ... Bạn có thể giúp? ... – Dany

+0

Bạn cần sử dụng [buttonImage objectAtIndex: 0] để đặt hình ảnh thành nút Lần thứ hai Sử dụng nút [buttonImage objectAtIndex: 1] Thứ ba [buttonImage objectAtIndex: 2]; Thứ tư [buttonImage objectAtIndex: 3]; Similary bạn phải thiết lập – Sumanth

+0

: Tks người đàn ông ... Tôi đã có sản lượng của tôi bằng cách xác định objectAtIndex là chỉ số ... Nhưng tôi đã cố gắng để hành động khác nhau cho mỗi nút bằng cách chọn nó ... Đây là mã của tôi cho nút đầu tiên – Dany

2

Bạn không thể đặt một loạt hình ảnh thành thuộc tính hình ảnh UIButton. Nếu bạn xem tài liệu của UIButton, bạn thấy rằng tài liệu mong đợi là UIImage.

1

Thử: [nút setImage: [buttonImage objectAtIndex: index] forState: UIControlStateNormal];

+0

: cảm ơn rất nhiều người ... nó hoạt động .. – Dany

2

Chỉ mục trong mã của bạn là gì ?? Đặt này:

[button setBackgroundImage:[buttonImage objectAtIndex:index] forState:UIControlStateNormal]; 
Các vấn đề liên quan