Comment masquer ces 2 lignes sur la ligne sélectionnée?
[[pickerview.subviews objectAtIndex:1] setHidden:TRUE];
[[pickerview.subviews objectAtIndex:2] setHidden:TRUE];
Utilisez ceci dans la méthode de délégué titleForRow
ou viewForRow
de la pickerView
.
Sur la base des autres réponses, j'ai décidé d'énumérer les sous-vues et de constater que les lignes ont une hauteur de 0.5
. Ma solution ressemble donc à ceci dans Swift:
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
pickerView.subviews.forEach({
$0.hidden = $0.frame.height < 1.0
})
return myRowCount
}
Et en Objective-C
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
[pickerView.subviews enumerateObjectsUsingBlock:^(UIView *subview, NSUInteger idx, BOOL *stop) {
subview.hidden = (CGRectGetHeight(subview.frame) < 1.0)
}];
return myRowCount
}
Évidemment pas particulièrement futuriste, mais probablement plus que de cacher une sous-vue à un index donné.
Edit: Mise à jour pour traiter le cas fourni par @Loris
Dans iOS7, la définition du paramètre pickerview.showsSelectionIndicator n'a aucun effet, selon la documentation ( https://developer.Apple.com/library/ios/documentation/userexperience/conceptual/UIKitUICatalog/UIPickerView.html ).
Cependant, comme UIPickerView est à la fin un UIView avec des sous-vues, j'ai vérifié quelles sous-vues il y avait. J'ai trouvé 3, le premier contient tous les composants de UIPickerView, et les deux autres sont les deux lignes.
Donc, en définissant les deuxième et troisième (index 1 et 2) masqués, les deux lignes ont été supprimées.
[[pickerview.subviews objectAtIndex:1] setHidden:TRUE];
[[pickerview.subviews objectAtIndex:2] setHidden:TRUE];
Ce n'est pas une vraie solution de Nice, et certainement pas compatible en aval, mais pour l'instant, le travail est fait. J'espère que cela t'aides.
Cela a fonctionné pour moi dans Swift dans iOS 9 Beta.
datePicker.subviews[0].subviews[1].hidden = true
datePicker.subviews[0].subviews[2].hidden = true
Swift 3 Version (en fonctionnement):
pickerView.subviews[1].isHidden = true
pickerView.subviews[2].isHidden = true
Cela fonctionne avant iOS 7.
pickerView.showsSelectionIndicator = NO;
pour plus d'infos sur ios7 voir cette doc
func numberOfComponents(in pickerView: UIPickerView) -> Int
{
pickerView.subviews.forEach({
$0.isHidden = $0.frame.height < 1.0
})
return 1
}
J'ai résolu ce problème par une astuce simple: Placez la vue sélecteur dans une vue et définissez la propriété subversion de clip de cette vue = true . Maintenant, définissez simplement la hauteur de la ligne dans la vue sélecteur = hauteur de la vue conteneur, puis la ligne disparaîtra.
Ceci est facilement réalisé. Placez simplement votre PickerView dans un ScrollView avec la taille souhaitée de votre ligne et utilisez la méthode du délégué de sélecteur (pickerView: rowHeightForComponent :) pour modifier la hauteur de la rangée du sélecteur à une taille légèrement supérieure à votre ScrollView. Comme ça, les lignes seront cachées.
Swift 4.2
Collez les deux lignes de code dans votre méthode de délégation titleForRow ou viewForRow du pickerView.
pickerView.subviews[1].isHidden = true
pickerView.subviews[2].isHidden = true
Et vous devriez être prêt à partir.
Il suffit d'écrire ce code dans votre méthode viewdidload
[[PickerView.subviews objectAtIndex:1] setHidden:TRUE];
[[PickerView.subviews objectAtIndex:2] setHidden:TRUE];
Dans iOS 7, nous ne pouvons pas masquer la ligne distincte dans UIPickerView Nous pouvons le savoir grâce à cette page: https://developer.Apple.com/library/ios/documentation/UIKit/Reference/UIPickerView_Class /index.html#//Apple_ref/occ/instm/UIPickerView/showsSelectionIndicator
Mais nous pouvons ajouter deux UIViews pour le couvrir et la largeur de deux UIViews est 1 . Quelques exemples de code ici:
s_leftLine = [[UIView alloc] initWithFrame:CGRectMake(s_pickerView.frame.size.height/2,
s_pickerView.frame.size.width/2 - kWidthOfPickerPage/2 + 1,
1,
s_pickerView.frame.size.height)];
s_leftLine.backgroundColor = [UIColor whiteColor];
s_leftLine.layer.zPosition = s_pickerView.layer.zPosition + 1; // make sure the line is on the top
[s_pickerView addSubview:s_leftLine];
Ok, ce sera beaucoup mieux:] Si quelqu'un a une meilleure réponse, il suffit de l'écrire pour le partager :)
Vous pouvez également créer une extension pour UIPickerView:
extension UIPickerView {
func hideSelectionIndicator() {
for i in [1, 2] {
self.subviews[i].isHidden = true
}
}
}
Ensuite, appelez simplement myPickerView.hideSelectionIndicator()
pour chaque PickerView que vous souhaitez modifier.
J'ai opté pour une approche différente afin de le rendre un peu plus évolutif au cas où Apple déciderait de changer quelque chose.
for subview in setPickerView.subviews{
if subview.frame.Origin.y != 0{
subview.isHidden = true
}
}
étant donné que l'emplacement de l'origine et de l'élément (la sous-vue qui contient les éléments) est 0, je peux alors masquer quoi que ce soit en toute sécurité sans risquer d'index hors erreur
Prendre plaisir
EDIT: J'ai oublié de vous dire que je l'ai mis dans la méthode viewDidLayoutSubviews!