2012-01-09 26 views
5

Tôi đang cố gắng thay đổi Hành động Đối với UIButton trong ứng dụng ios. Tôi đã Sau MãCó thể thay đổi hành động cho UIButton không?

button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

    [button addTarget:self action:@selector(aMethodShow:) forControlEvents:UIControlEventTouchDown]; 

    [button setTitle:@"Show View" forState:UIControlStateNormal]; 

    button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); 

    [view addSubview:button]; 

Trong phần đặc biệt là tôi muốn thay đổi hành động cho nút này Vì vậy, tôi đã làm điều này

[button addTarget:self action:@selector(aMethodHide:) forControlEvents:UIControlEventTouchDown]; 
[button setTitle:@"Hide View" forState:UIControlStateNormal]; 

Thật không may này đang chú ý làm việc?

+0

aMethodShow đang làm việc lần đầu tiên? aMethodHide không hoạt động khi bạn thay đổi nó? –

+0

hai hành động đang dùng cùng một sự kiện (nhấp) cho nút, làm cách nào tôi có thể xóa mục tiêu đầu tiên. –

+0

Bạn muốn nói, khi bạn nhấp vào, cả hai phương pháp đều được gọi? –

Trả lời

17

Tôi đề xuất trước khi thêm mục tiêu mới, trước tiên hãy gọi removeTarget trên đối tượng UIbutton rồi thêm mục tiêu mới với hành động khác.

+0

Làm việc tốt của nó, Tại sao hành động này được viện dẫn cho cùng một sự kiện –

2

Bạn có thể sử dụng cùng một mục tiêu hành động thay vì sử dụng hai mục tiêu. Trong một mục tiêu mà bạn phải phân biệt như dưới đây

-(void)btnAction 
{ 
     if(target1) 
      { 
      // code for target 1 
      } 

     else 
     { 
      // code for target 2 
     } 

} 

Đây target1 là BOOL giá trị mà giá trị đầu tiên thiết lập để được YES. Và thay đổi giá trị NO bất cứ khi nào bạn muốn thực hiện mã mục tiêu 2.

Tôi hy vọng điều này sẽ giúp bạn.

+0

Nếu tôi không muốn kiểm tra điều kiện, nếu tôi đặt mục tiêu nhiều lần với bộ chọn khác nhau (showButton, HideButton, v.v.) Tất cả hành động được gọi đồng thời .. tại sao điều này có vui không? –

0

Tôi đã thực hiện một ứng dụng gần đây và tôi đã có tình huống tương tự, nhưng tôi tìm thấy một cách khác để giải quyết nó vì vậy tôi quyết định chia sẻ giải pháp của tôi với những người có thể ở trong cùng một tình huống.

tôi sẽ cố gắng giải thích những gì tôi đã làm với bối cảnh của câu hỏi này:

  • Tôi đã thêm một thẻ vào button và tôi liên tưởng nó với một trong những chức năng mà button nhu cầu gọi (aMethodShow: ví dụ).

  • button luôn gọi cùng chức năng (ví dụ: callSpecificFunc:). Những gì callSpecificFunc: thực hiện là gọi hàm aMethodShow: hoặc aMethodHide theo thẻ hiện tại button.

  • Trong phần cụ thể trong đó button cần gọi một chức năng khác, tôi chỉ thay đổi thẻ của button.

Something như thế này:

NSInteger tagOne = 1000; //tag associated with 'aMethodShow' func 
NSInteger tagTwo = 1001; //tag associated with 'aMethodHide' func 

button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button addTarget:self action:@selector(callSpecificFunc:) forControlEvents:UIControlEventTouchDown]; 
[button setTitle:@"Show View" forState:UIControlStateNormal]; 
button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); 
[view addSubview:button]; 

... 
// in some part of code, if we want to call 'aMethodShow' function, 
// we set the button's tag like this 
button.tag = tagOne 

... 

//Now, if we want to call 'aMethodHide', just change the button's tag 
button.tag = tagTwo 

... 

-(void) callSpecificFunc:(UIButton*)sender 
{ 
    NSInteger tagOne = 1000; 
    NSInteger tagTwo = 1001; 

    if([sender tag] == tagOne){ 
     //do whatever 'aMethodShow' does 
    }else { 
     //do whatever 'aMethodHide' does 
    } 
} 

Tất nhiên nó có thể được áp dụng trong hơn 2 chức năng :)

8

Tôi nghĩ rằng nó sẽ giúp bạn

[yourButton removeTarget:nil 
       action:NULL 
    forControlEvents:UIControlEventAllEvents]; 

[yourButton addTarget:self 
       action:@selector(yourAction:) 
    forControlEvents:UIControlEventTouchUpInside]; 
Các vấn đề liên quan