2010-06-07 7 views
4

J'ai une exigence où UIPickerView doit être personnalisé. La vue du sélecteur devrait ressembler à ceci:Personnalisation de UIPickerView

alt text http://i45.tinypic.com/2ut565s.png

L'application qui a personnalisé le pickerView est similaire: http://itunes.apple.com/us/app/convert-the-unit-calculator/id325758140?mt=8

J'ai essayé de supprimer la valeur par défaut pickerView barre de sélection en réinitialisant la propriété showsSelectionIndicator de UIImagePicker et en ajoutant une vue de superposition. Mais le problème est, la vue de superposition devrait être transparente de sorte que la roue derrière elle soit visible. Mais l'autre application le fait d'une manière ou d'une autre même si la barre de sélection n'est pas transparente.

Des idées sur la façon d'atteindre cet exploit?

Merci et salutations, Raj

+0

je dois mettre en œuvre dans mon projet comment puis-je y parvenir? –

+0

Au moment où je cherchais la solution, il n'y avait pas de moyen direct pour y parvenir. J'ai réussi à convaincre l'équipe de design de changer l'aspect et la convivialité de l'équipe. –

Répondre

1

Vous allez devoir écrire votre propre à partir de zéro sur celui-ci. UIPickerview n'est pas personnalisable. À. Tout. Suce, mais c'est comme ça. Je commençais à créer une vue d'ensemble et à superposer un cadre autour d'elle, et à essayer d'imiter uipickerview.

+0

Merci pour la suggestion, mais en utilisant la vue de table êtes-vous sûr que cet exploit est réalisable? Je veux dire, avez-vous reconnu des obstacles pour y arriver? –

+0

Je n'ai pas été capable de le faire moi-même. Mais le seul obstacle serait d'attraper le Composant sélectionné. Vous devriez être capable de le faire en utilisant contentOffset et en calculant de cette façon. Je ne l'ai pas fait, mais je ne vois pas pourquoi vous ne pourriez pas. Je suis sûr que l'uipickerview d'Apple utilise une sorte d'uitable comme moyen de présenter les cellules. – kodai

+0

Oui, la personnalisation est possible, mais le seul obstacle est de changer la couleur de la police. La couleur de police d'une partie du texte qui entre dans la barre de sélection doit être changée en blanc, la partie restante doit être de couleur originale. Est-ce possible? –

1

Je pense que vous pouvez imprimer les sous-vues sous le sélecteur et les modifier. UIPickerView crée des sous-vues après le chargement initial des données. Avec performSelecter: WithObject: afterDelay:, vous pouvez les supprimer ou insérer ce dont vous avez besoin.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self refreshClock]; 
    [timePicker_ performSelector:@selector(leakSelf) withObject:nil afterDelay:0]; 
    [self performSelector:@selector(setupTimePicker) withObject:nil afterDelay:0]; 
} 
- (void)setupTimePicker { 
    [[timePicker_ subviewOfClass:NSClassFromString(@"_UIPickerViewTopFrame")] removeFromSuperview]; 
    CGRect frame = timePicker_.frame; 
    frame.size.width += 20; 
    frame.origin.x -= 10; 
    timePicker_.frame = frame; 
} 


@implementation UIView(UIViewDebugTool) 


- (void)leakSubview:(UIView*)subroot atDepth:(NSUInteger)dep { 

    DLog(@"trace sub view[%u] %@", dep, [subroot description]); 
    CALayer* layer = subroot.layer; 
    for(CALayer* l in layer.sublayers) { 
     DLog(@"layer[%u] %@", dep, l); 
    } 
    for(UIView* v in subroot.subviews) { 
     [self leakSubview:v atDepth:dep+1]; 
    } 

} 

- (void)leakSelf { 
    NSUInteger dep = 0; 
    [self leakSubview: self atDepth:dep]; 
} 

@end