Al establecer la propiedad de userInteractionEnabled
UILabel
a YES
corrige el problema de poner de relieve, pero también desactiva el UIPickerView
de desplazamiento automático para seleccionar la fila que ha sido tocado.
Si desea desactivar el comportamiento resaltado, pero mantener la funcionalidad de desplazamiento automático por defecto el UIPickerView
's, llamar a la función setShowSelection
en los UITableCell
casos contenidos en el UIPickerView
. Una forma de hacer esto es una subclase de la clase UILabel
similar al siguiente:
PickerViewLabel.h -
#import <UIKit/UIKit.h>
@interface PickerViewLabel:UILabel
{
}
@end
PickerViewLabel.m -
#import "PickerViewLabel.h"
@implementation PickerViewLabel
- (void)didMoveToSuperview
{
if ([[self superview] respondsToSelector:@selector(setShowSelection:)])
{
[[self superview] performSelector:@selector(setShowSelection:) withObject:NO];
}
}
@end
Luego, en el que previamente se había devolviendo una instancia de UILabel
en pickerView:viewForRow:forComponent:reusingView:
, devolver una instancia de PickerViewLabel
. A modo de ejemplo, utilizando el código de Doug, debería reemplazar todos los casos de 'UILabel
' con 'PickerViewLabel
'. Solo recuerde eliminar la línea pickerRowLabel.userInteractionEnabled = YES;
.
El showsSelectionIndicator se encarga de mostrar la barra azul sobre el valor que será devuelto por el selector. Desafortunadamente, no tiene nada que ver con la estructura UITableViewCell subyacente. – Jon