2010-02-09 88 views
11

我想爲標題和圖像的UIButton我的iPhone應用程序製作標準複選框。按鈕圖像在「未選中」圖像和「已選中」圖像之間切換。製作UIButton複選框的最佳方法是什麼?

起初我嘗試繼承UIButton,但UIButton沒有-init***方法用於我的-init方法。

這樣做的最好方法是什麼?

在此先感謝。

回答

38

您應該不需要繼承UIButton類。通過設計,Objective-C支持合成而不是繼承。

UIButtonUIControl的子類,它具有selected屬性。您可以使用此屬性切換複選框的開啓/關閉行爲,就像UISwitch一樣。

您可以附加到按鈕的行動感動了內部事件,並在那裏進行來回切換,這樣的事情:

// when you setup your button, set an image for the selected and normal states 
[myCheckBoxButton setImage:checkedImage forState:UIControlStateSelected]; 
[myCheckBoxButton setImage:nonCheckedImage forState:UIControlStateNormal]; 

- (void)myCheckboxToggle:(id)sender 
{ 
    myCheckboxButton.selected = !myCheckboxButton.selected; // toggle the selected property, just a simple BOOL 
} 
+1

你也可以用一行來做這件事。 'myCheckboxButton.selected =!myCheckboxButton.selected' – Diziet 2012-11-01 12:17:53

+4

你可以通過設置按鈕狀態的圖像來避開if-else UIControlStateSelected;) – Climbatize 2013-05-22 07:52:38

0

你是否嘗試覆蓋initWithCoder方法,以防萬一它以某種方式從一個nib加載?

+2

真的沒有答案。 – 2014-07-03 12:47:03

7

設置的按鈕圖像:

[button setImage:uncheckedImage forState:UIControlStateNormal] 
[button setImage:checkedImage forState:UIControlStateSelected] 

現在所有你需要做的是:

button.selected = state 

和正確的圖像將顯示。

+0

有用的答案... – Biranchi 2013-08-20 09:49:17

4

您需要做的就是爲狀態UIControlStateNormalUIControlStateSelected設置2個不同的圖像,然後在您的選擇器中更改該按鈕的selected屬性。

這裏是工作示例(換成你自己的圖片名稱):

- (void)loadView { 
    // ... 
    UIButton *chkBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [chkBtn setFrame:CGRectMake(0, 0, 300, 25)]; 

    [chkBtn setImage:[UIImage imageNamed:@"UNCHECKED.png"] 
      forState:UIControlStateNormal]; 
    [chkBtn setImage:[UIImage imageNamed:@"CHECKED.png"] 
      forState:UIControlStateSelected]; 

    [chkBtn addTarget:self 
       action:@selector(chkBtnHandler:) 
    forControlEvents:UIControlEventTouchUpInside]; 

    // Optional title change for checked/unchecked 
    [chkBtn setTitle:@"I am NOT checked!" 
      forState:UIControlStateNormal]; 
    [chkBtn setTitle:@"I am checked!" 
      forState:UIControlStateSelected]; 

    [self.view addSubview:chkBtn]; 
    [chkBtn release], chkBtn = nil; 
    // ... 
} 

- (void)chkBtnHandler:(UIButton *)sender { 
    // If checked, uncheck and visa versa 
    [sender setSelected:!sender isSelected]; 
} 
4

任何有興趣在未來的 - 而不是做自己剛剛從GitHub下載下面的鏈接,它已經從子類UIControl已經成爲一個複選框,並且功能完美。此外,還包括它是多麼容易使用的示例項目:

https://github.com/Brayden/UICheckbox

0
UIImage* nonCheckedImage=[UIImage imageNamed:@"ic_check_box_outline_blank_grey600_48dp.png"];//[UIImage init 
    UIImage* CheckedImage=[UIImage imageNamed:@"ic_check_box_black_48dp.png"];//[UIImage init 

    //ic_check_box_black_48dp.png 
    [_checkBox setImage:CheckedImage forState:UIControlStateSelected]; 
    [_checkBox setImage:nonCheckedImage forState:UIControlStateNormal]; 
} 

- (IBAction)checkBoxToggle:(id)sender { 
    _checkBox.selected = !_checkBox.selected; // toggle the selected property, just a simple BOOL 

} 

的圖像,你可以使用谷歌圖標

0

試試這個: -

-(IBAction)clickCheckButton:(UIButton *)sender { 

    if (sender.tag==0) { 

    sender.tag = 1; 

    [sender setImage:[UIImage imageNamed:@"check.png"] forState:UIControlStateNormal]; 

    }else 

    { 

    sender.tag = 0; 

    [sender setImage:[UIImage imageNamed:@"uncheck.png"] forState:UIControlStateNormal]; } } sender.tag = 0; 

    [sender setImage:[UIImage imageNamed:@"uncheck.png"] forState:UIControlStateNormal]; 

    } 
} 
+0

他不想試試它? – chouaib 2014-12-18 07:33:28

+0

你的意思是?我不理解 ? – King 2014-12-18 07:44:24

+0

我的意思是人不總是想嘗試沒有解釋的東西 – chouaib 2014-12-18 08:49:38

0

爲什麼不使用一個開關 - UISwitch?這用於顯示一個顯示值的布爾狀態的元素。

相關問題