2010-10-07 5 views
1

J'essaie de personnaliser ma sélection pour qu'elle soit vérifiable comme lorsque vous cliquez sur la liste déroulante sur le WebView comme sur l'image (site Web youtube).Checkable UIPickerView dans iPhone Safari

enter image description here http://img830.imageshack.us/img830/3747/screenshot20101004at606.png

j'utiliser la méthode viewForRow pour personnaliser vue pour chaque ligne de sélecteur.

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 
{ 

UIView *rowView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 280, 44)] autorelease]; 
rowView.backgroundColor = [UIColor clearColor]; 
rowView.userInteractionEnabled = NO; 

UIImageView *checkmarkImageView = [[UIImageView alloc] initWithFrame:CGRectMake(5, 10, 24, 19)]; 

UIFont *font = [ UIFont boldSystemFontOfSize:18]; 
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(35, 0, 240, 44) ]; 
NSString *pickerText = [[Itemlist objectAtIndex:row] objectForKey:@"name"]; 
titleLabel.text = pickerText; 
titleLabel.textAlignment = UITextAlignmentLeft; 
titleLabel.backgroundColor = [UIColor clearColor]; 
titleLabel.font = font; 
titleLabel.opaque = NO; 

if ([selected_property_id intValue] == row) { 
    titleLabel.textColor = [UIColor blueColor]; 
    checkmarkImageView.image = [UIImage imageNamed:@"checkmark.png"]; 
}else { 
    titleLabel.textColor = [UIColor blackColor]; 
    checkmarkImageView.image = nil; 
} 

[rowView addSubview:checkmarkImageView]; 
[rowView addSubview:titleLabel]; 
[titleLabel release]; 
[checkmarkImageView release]; 

return rowView; 

} 


- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
[m_pickerView reloadAllComponents]; 
} 

Lorsque je sélectionne la ligne que je veux, il ajouter à la ligne coche sélectionnée parfaitement mais quand je défiler sélecteur haut/bas le sélecteur sera automatiquement sélectionner la ligne au milieu du sélecteur. Donc, il ajoute une coche dans la ligne du milieu.

Ma question est de savoir comment désactiver la sélection automatique sur la rangée du milieu. Il devrait ajouter une coche lorsque l'onglet de l'utilisateur sur la ligne qu'ils veulent seulement (comme sur youtube). Dois-je utiliser la méthode des événements tactiles pour la sélection?

Merci pour l'aide.

+0

Si vous souhaitez que 'UIPickerView' affiche les coches pour vous, s'il vous plaît [file a bug] (http://bugreport.apple.com) demande cette fonctionnalité. –

Répondre

1

Oui, vous devez utiliser les événements tactiles. Cependant, le standard UIPickerView capture les contacts et ne les transmettra pas, donc le viewcontroller ne reçoit jamais les événements.

J'ai créé un project on Github avec une sous-classe UIPickerView qui permet d'y échapper. Il les transmet à sa vue d'ensemble puis gère la sélection dans la méthode touchEnded du viewcontroller. Il implémente également la coche mentionnée.