L'impostazione della proprietà userInteractionEnabled
di UILabel
a YES
risolve il problema mettendo in evidenza, ma disattiva anche il UIPickerView
da scorrimento automatico per selezionare la riga che è stato toccato.
Se si desidera disattivare il comportamento evidenziazione, ma mantenere la funzionalità predefinita scorrimento automatico 's il UIPickerView
, chiamare la funzione setShowSelection
nelle UITableCell
casi contenuti nel UIPickerView
. Un modo per farlo è quello di creare una sottoclasse della classe UILabel
simile al seguente:
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
Allora, dove è stata precedentemente restituendo un'istanza di UILabel
in pickerView:viewForRow:forComponent:reusingView:
, restituire un'istanza di PickerViewLabel
. Ad esempio, utilizzando il codice da Doug, sostituire tutti i casi di "UILabel
" con "PickerViewLabel
". Basta ricordare di rimuovere la riga pickerRowLabel.userInteractionEnabled = YES;
.
ShowSelectionIndicator è responsabile della visualizzazione della barra blu sul valore che verrà restituito dal selettore. Sfortunatamente non ha nulla a che fare con la struttura di UITableViewCell sottostante. – Jon