Reputation: 10378
What I'm trying to do:
In a simple UITableView, I've got a form with both text and dates/times that can be edited. I'm using UITextFields in the date/time cells too, so that the inputView property can be used to display a datePicker over the keyboard.
What the problem is:
The problem with this is that these UITextFields are really just dummy fields that show a datePicker when selected. When they're selected, they show this annoying blue cursor that blinks - but these are just dummy text fields, and I don't want them to become visible at all.
If I set alpha = 0 or hidden = YES, then the textField no longer is clickable.
Any ideas of a way around this - or, a different solution to my initial problem? Thanks
Upvotes: 1
Views: 4098
Reputation: 131
To use the text field's "inputView" property, overlay your textfield on top of a label. Then simply hide and show the textfield from the textFieldDid* methods, but show the actual display value in the label.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
....
[cell.contentView addSubview:myLabel];
[cell.contentView addSubview:myTextField];
....
}
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
if (textField == self.myTextField) {
[textField setHidden:YES];
}
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
if (textField == self.myTextField) {
[textField setHidden:NO];
}
}
- (void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
self.myLabel.text = @"Set value here";
}
Upvotes: 1
Reputation: 10378
I finally figured out a way around it. By hiding the UITextView, no touches are detected. However if I overlay a custom UIButton (which can be invisible) then I can activate the UITextField when the button is touched via
[myTextField becomeFirstResponder];
and then the datePicker will replace the keyboard just like it should.
Upvotes: 3
Reputation: 1789
See my answer here: Disable blinking cursor in a UITextField
That will hide the cursor and give you the option of whether or not to display anything to the user.
Upvotes: 0
Reputation: 5438
I would use a UILabel
with a UItapGestureRecognizer
to know when the user taps on the label.
The text field control should only be used when actual text input is necessary.
Tell me if you need more help with the gesture recognizer, they are very easy to use and save you a lot of trouble.
Upvotes: 1