Je connais UITableview: Comment désactiver la sélection de certaines lignes mais pas d’autres et cell.selectionStyle = UITableViewCellSelectionStyleNone
, mais comment puis-je faire en sorte qu'une cellule (ou tout UIView
d'ailleurs) apparaisse désactivée (grisée - comme ci-dessous?
Réponses
Trop de publicités? Grâce à @Ajay Sharma, j'ai découvert comment faire en sorte qu'un UITableViewCell
apparaisse désactivé:
// Mac's native DigitalColor Meter reads exactly {R:143, G:143, B:143}.
cell.textLabel.alpha = 0.439216f; // (1 - alpha) * 255 = 143
aSwitch.enabled = NO; // or [(UISwitch *)cell.accessoryView setEnabled:NO];
Et puis, pour réellement désactiver la cellule:
cell.userInteractionEnabled = NO;
Essayez d'utiliser une petite astuce:
Il suffit de régler l'alpha de la cellule. Mettre une condition en tant que vos propres besoins et définir l'alpha.
cell.alpha=0.2;
Si cela ne fonctionne pas,la façon dont vous voulez qu'il soit ensuite, Utilisez deuxième astuce,
Il suffit de prendre une image de la taille des cellules ayant un fond gris avec un Fond Transparent, il suffit d'ajouter cette image dans l'image sur le contenu de la cellule. Comme ceci:
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell...
if(indexPath.row==0)
{
cell.userInteractionEnabled=FALSE;
UIImageView *img=[[UIImageView alloc]init];
img.frame=CGRectMake(0, 0, 320, 70);
img.image=[UIImage imageNamed:@"DisableImage.png"];
img.backgroundColor=[UIColor clearColor];
[cell.contentView addSubview:img];
[img release];
}
else {
//Your usual code for cell interaction.
}
return cell;
}
Bien que je ne suis pas sûr de la façon dont,mais ce sera certainement répondre à votre exigence.Cela permettra de donner une sorte d'illusion dans l'esprit de l'utilisateur que la cellule est Désactiver. Simplement essayer d'utiliser cette solution.Espère que cela va résoudre votre problème.
J'ai créé à la suite de l'extension pour Activer/Désactiver UITableViewCell, il est très pratique à utiliser. Créer UITableViewCell Extension avec des "UITableViewCell+Ext.h" contient suivantes.
@interface UITableViewCell (Ext)
- (void)enableCell:(BOOL)enabled withText:(BOOL)text;
- (void)enableCell:(BOOL)enabled withText:(BOOL)text withDisclosureIndicator:(BOOL)disclosureIndicator;
- (void)disclosureIndicator:(BOOL)disclosureIndicator;
@end
"UITableViewCell+Ext.m" contiennent suivantes.
@implementation UITableViewCell (Ext)
- (UITableView *)uiTableView {
if ([[UIDevice currentDevice] systemVersionIsGreaterThanOrEqualTo:@"7.0"]) {
return (UITableView *)self.superview.superview;
}
else {
return (UITableView *)self.superview;
}
}
- (void)enableCell:(BOOL)enabled withText:(BOOL)text {
if (enabled) {
self.userInteractionEnabled = YES;
if (text) {
self.textLabel.alpha = 1.0f;
self.alpha = 1.0f;
self.detailTextLabel.hidden = NO;
}
}
else {
self.userInteractionEnabled = NO;
if (text) {
self.textLabel.alpha = 0.5f;
self.alpha = 0.5f;
self.detailTextLabel.hidden = YES;
}
}
}
- (void)enableCell:(BOOL)enabled withText:(BOOL)text withDisclosureIndicator:(BOOL)disclosureIndicator {
if (enabled) {
self.userInteractionEnabled = YES;
if (text) {
self.textLabel.alpha = 1.0f;
self.alpha = 1.0f;
self.detailTextLabel.hidden = NO;
}
self.accessoryType = disclosureIndicator ? UITableViewCellAccessoryDisclosureIndicator : UITableViewCellAccessoryNone;
}
else {
self.userInteractionEnabled = NO;
if (text) {
self.textLabel.alpha = 0.5f;
self.alpha = 0.5f;
self.detailTextLabel.hidden = YES;
}
self.accessoryType = UITableViewCellAccessoryNone;
}
}
- (void)disclosureIndicator:(BOOL)disclosureIndicator {
if (disclosureIndicator) {
self.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
else {
self.accessoryType = UITableViewCellAccessoryNone;
}
}
@end
Comment faire pour Désactiver la Cellule:
[cell enableCell:NO withText:NO];
[cell enableCell:NO withText:YES withDisclosureIndicator:YES];
Comment faire pour Activer la Cellule:
[cell enableCell:YES withText:NO];
[cell enableCell:YES withText:YES withDisclosureIndicator:YES];
Espérons qu'il vous aide.