2010-03-17 29 views
10

Làm cách nào để tôi đặt thẻ cho một nút theo chương trình?Làm cách nào để tôi đặt và nhận thẻ UIButtons?

sau, tôi muốn so sánh với thẻ cho một kết luận

ive đã cố gắng này

-(IBAction)buttonPressed:(id)sender{ 
NSLog(@"%d", [sender tag]); 
} 

nhưng điều đó chỉ bị treo ứng dụng .... :(

bất kỳ ý tưởng nào khác?

Cheers Guys

Sam

Trả lời

13

Bạn cần phải đúc người gửi như một UIButton:

-(IBAction)buttonPressed:(id)sender{ 
UIButton *button = (UIButton *)sender; 
NSLog(@"%d", [button tag]); 
} 

Edit: Về thông báo "không được công nhận selector" ...

Dựa trên thông báo lỗi của bạn, nó không thể gọi phương thức buttonPressed trong nơi đầu tiên. Chú ý trong thông báo lỗi nó đang tìm "buttonPressed" (không có dấu hai chấm ở cuối) nhưng phương thức này có tên "buttonPressed:". Nếu bạn đang đặt mục tiêu nút trong mã, hãy đảm bảo rằng bộ chọn được đặt thành buttonPressed: thay vì chỉ buttonPressed. Nếu bạn đang thiết lập mục tiêu trong IB, xib có thể không đồng bộ với mã.

Ngoài ra, mã ban đầu của bạn "[thẻ người gửi]" cũng nên hoạt động nhưng để truy cập các thuộc tính cụ thể của nút, bạn sẽ vẫn cần truyền đến UIButton.

+0

vẫn bị treo ... :( –

+0

2010/03/17 16: 07: 35,322 Memory [37.490: 207] *** - [MemoryViewController buttonPressed]: chọn không được công nhận gửi đến dụ 0x3b08cb0 2010-03-17 16: 07: 35.324 Bộ nhớ [37490: 207] *** Chấm dứt ứng dụng do ngoại lệ vô tình 'NSInvalidArgumentException', lý do: '*** - [MemoryViewController buttonPressed]: bộ chọn không nhận dạng được gửi tới ví dụ 0x3b08cb0' ngăn xếp .... –

+1

[thẻ nút] sẽ hoạt động. Vui lòng xem các chỉnh sửa cho câu trả lời – DyingCactus

5

Tôi biết đây là một câu hỏi cũ và đã được trả lời nhiều lần trong các câu hỏi khác, nhưng nó xuất hiện trong một tìm kiếm của google như là thứ hai từ đầu. Vì vậy, đây là câu trả lời cho lý do tại sao nó đã bị rơi. Thay đổi nó thành 'button.tag'

-(void)myMethod 
{ 
    UIButton *theButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [theButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown]; 

    theButton.tag = i;//or whatever value you want. In my case it was in a forloop 

} 

-(void)buttonPressed:(id)sender 
{ 
    UIButton *button = (UIButton *)sender; 
    NSLog(@"%d", button.tag); 
} 
+0

Nó hoạt động! Nhưng điều lạ lùng là [nút thẻ] bị lỗi! Không phải là [] nhiều hơn so với bản địa. Ký hiệu? – sooon

+0

@ sooon: button.tag được cài đặt nội bộ ed dưới dạng [nút getTag] và [nút setTag:]. Vì thực tế không có chức năng "thẻ", nó bị treo. – prewett

-1

Không cần phải truyền. Điều này sẽ làm việc:

-(IBAction)buttonPressed:(UIButton*)sender 
{ 
NSLog(@"%d", [sender tag]); 
} 
Các vấn đề liên quan