Я сделал это с помощью UITextField, чтобы избежать рисования чего-либо странного, но мне понравилось помещать в текст в виде галочки Unicode (Unicode Character 'CHECK MARK' (U + 2713)) для NSString: @ "\ u2713".
Таким образом, в моем файле .h (реализует протокол для UITextField 'UITextFieldDelegate'):
UITextField * myCheckBox;
В моем viewDidLoad или функции для подготовки пользовательского интерфейса:
...
myCheckBox = [[UITextField alloc] initWithFrame:aFrame];
myCheckBox.borderStyle = UITextBorderStyleRoundedRect; // System look like
myCheckBox.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
myCheckBox.textAlignment = NSTextAlignmentLeft;
myCheckBox.delegate = self;
myCheckBox.text = @" -"; // Initial text of the checkbox... editable!
...
Затем добавьте селектор событий для повторения в событии касания и вызова события responseSelected:
...
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(checkboxSelected)];
[myCheckBox addGestureRecognizer:tapGesture];
...
Наконец, ответьте на этот селектор
-(void) checkboxSelected
{
if ([self isChecked])
{
// Uncheck the selection
myCheckBox.text = @" -";
}else{
//Check the selection
myCheckBox.text = @"\u2713";
}
}
Функция 'isChecked' только проверяет, является ли текст галочкой @ "\ u2713". Чтобы не показывать клавиатуру, когда текстовое поле выделено, используйте событие UITextField 'textFieldShouldBeginEditing' и добавьте селектор событий для управления выделением:
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
// Question selected form the checkbox
[self checkboxSelected];
// Hide both keyboard and blinking cursor.
return NO;
}