2012-02-22 37 views
9

Czy w bibliotece obiektów dla aplikacji iOS znajduje się kontrolka checkbox? Najbliższą rzeczą, którą widzę, jest kontrola przełącznika, która może przyjąć wartość boolowską.Kontrola pola wyboru dla aplikacji iOS

+0

UISegmentedControl może pomóc – 0xDE4E15B

+1

członkowskie stosują UIButton do wyboru/znaków zaznaczenie. Umieść obrazy odznaczenia (stan normalny) i sprawdź (stan wybrany). – Hirak

+0

Nie ma domyślnej kontroli interfejsu użytkownika dla pola wyboru lub przycisku opcji, tutaj musisz użyć 2 różnych obrazów do zaznaczenia i odznaczenia i kontrolować je logicznie – kulss

Odpowiedz

36

Można użyć wybranego stanu na UIButton, zestaw różnych obrazów (albo także teksty) dla zróżnicowanych (za pośrednictwem kodu lub Interfejs Builder)

[button setImage:[UIImage imageNamed:@"selected.png"] 
     forState:UIControlStateSelected]; 
[button setImage:[UIImage imageNamed:@"unselected.png"] 
     forState:UIControlStateNormal]; 

A w kontakcie działaniach wewnątrz:

- (IBAction)buttonTouched:(id)sender 
{ 
    button.selected = !button.selected; 
    // add other logic 
} 
+0

Bardzo przydatne dla mnie. Dzięki ..... – Vaquita

+0

Jest to biblioteka typu open source zapewniająca implementację. https://github.com/t4ku/RadioButtonWithUIKit –

+0

Nie działa. Musisz wziąć UIImageView. –

1

To jest kod, którego używam dla dwóch pól wyboru na ekranie. (Umieszczam je na dole dwóch obrazów, które są również na ekranie.Użyj UIControlEventTouchDown, aby wywołać metodę checkBoxTapped Metoda ta rozmawia z moim głównym kontrolerem widoku, gdzie decyduję czy odpowiedź była poprawna czy niepoprawna. kontroler oddzwania na ten widok i mówi jej, aby zmienić puste pole tekstowe albo do sprawdzenia:

enter image description here

albo x

enter image description here

// Put the Checkboxes on the screen 
UIImage *checkBox = [UIImage imageNamed:@"Checkbox"]; 

self.checkBoxLeft = [UIButton buttonWithType:UIButtonTypeCustom]; 
[self.checkBoxLeft setImage:checkBox forState:UIControlStateNormal]; 
[self.checkBoxLeft setFrame:checkBoxFrameLeft]; 
[self.checkBoxLeft addTarget:self 
         action:@selector(checkBoxTapped:) 
      forControlEvents:UIControlEventTouchDown]; 

[self.checkBoxLeft setTitle:@"checkBoxLeft" forState:UIControlStateNormal]; 
self.checkBoxLeft.contentEdgeInsets = insets; 
self.checkBoxLeft.showsTouchWhenHighlighted = NO; // Keeps it from turning gray 

self.checkBoxRight = [UIButton buttonWithType:UIButtonTypeCustom]; 
[self.checkBoxRight setImage:checkBox forState:UIControlStateNormal]; 
[self.checkBoxRight setFrame:checkBoxFrameRight]; 
[self.checkBoxRight addTarget:self 
         action:@selector(checkBoxTapped:) 
      forControlEvents:UIControlEventTouchDown]; 

[self.checkBoxRight setTitle:@"checkBoxRight" forState:UIControlStateNormal]; 
self.checkBoxRight.contentEdgeInsets = insets; 
self.checkBoxRight.showsTouchWhenHighlighted = NO; // Keeps it from turning gray 

- (void)checkBoxTapped:(UIButton *)buttonPressed { 
    [[self delegate] checkBoxTapped:buttonPressed.currentTitle]; 
} 

- (void)highlightCheckbox:(NSString *)checkboxToHighlight withHighlight:(NSString *)highlight { 

    if ([checkboxToHighlight isEqualToString:@"left"]){ 
     [self.checkBoxLeft setImage:[UIImage imageNamed:highlight] forState:UIControlStateNormal]; 
    } else { 
     [self.checkBoxRight setImage:[UIImage imageNamed:highlight] forState:UIControlStateNormal]; 
    } 
} 
0

// określić właściwość przycisku

stwierdzenie niezaznaczone obraz

- (void)viewDidLoad 
{ 
    [_checkboxButton setBackgroundImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal]; 
} 

sprawdzone Obraz.

- (IBAction)buttonTapped:(id)sender 
{ 
    if (_checkboxButton.selected == YES) 
    { 
     [_checkboxButton setBackgroundImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateSelected]; 
     _checkboxButton.selected = NO; 
    } 
    else 
    { 
     [_checkboxButton setBackgroundImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal]; 
     _checkboxButton.selected = YES; 
    } 
}