2012-03-07 12 views
6

Tôi đã tạo ra NSPopUpButton tôi lập trình với đoạn mã sauSetAction cho NSPopUpButton được vô hiệu hóa popUpButton tôi

[myPopUpButton insertItemWithTitle:@"--Select one--" atIndex:0]; 
[myPopUpButton addItemsWithTitles:[NSArray arrayWithObjects:@"1.One",@"Two",@"Three", nil]]; 

[myPopUpButton sizeToFit]; 
[myPopUpButton setAction:@selector(popUpAction:)]; 
[fullBrowserView addSubview: myPopUpButton]; 

//PopUp Action 
-(void)popUpAction:(id)sender 
{ 
    NSLog(@"popUpAction"); 
} 

Khi tôi bấm vào popUpButton, các mục menu của popUpButton bị vô hiệu hóa. Khi tôi sử dụng interfacebuilder, nó hoạt động tốt với IBAction.

Tại sao setAction này không hoạt động cho NSPopUpButton?

Trả lời

12

Có vẻ như bạn không đặt mục tiêu mục tiêu để gửi tin nhắn đến. Vì vậy, trong mã, hãy thêm:

[myPopUpButton setTarget:self]; 

giả định phương pháp popUpAction: nằm trong cùng một lớp.

Khi bạn đang sử dụng Trình tạo giao diện, nó sẽ kết nối hành động chọn với mục tiêu.

Từ tài liệu cho cuộc gọi này:

- (void)setTarget:(id)anObject

Nếu anObject là nil nhưng sự kiểm soát vẫn có một thông điệp hành động hợp lệ giao, ứng dụng sau chuỗi trả lời khi tìm kiếm một đối tượng mà có thể đáp ứng vào tin nhắn.

Trong trường hợp của bạn, không có đối tượng trả lời cho thư.

2

Thậm chí nếu myPopUpButton có một mục tiêu và hành động, bạn cũng có thể cần phải làm thêm:

[myPopUpButton setAutoenablesItems:NO]; 

Nếu không, mỗi lần nút được nhấn vào, nó có thể tự động vô hiệu hóa tất cả các mục trên menu của nó. (Tôi nhận ra câu hỏi này là cũ, nhưng đăng giải pháp này trong trường hợp nó giúp người khác).