Custom UIAlertView @ NSObject
yass_1988
Membre
Bonjour,
voila je vous présente un petit problème que j'ai rencontré:
Dans mon viewController, j'ai une méthode qui me permet d'initialiser une classe "RenameFeature" de type NSObject en lui passant en paramètre une instance de mon viewController et d'exécuter une méthode de cette classe.
viewController.m:
la méthode de RenameFeature que j'exécute, me permet d'afficher une AlertView que j'ai customisé.
RenameFeature.h:
RenameFeature.m:
AlertPrompt.h:
AlertPrompt.m:
Le soucis est que ma fenêtre d'alerte customisé s'affiche bien, par contre elle ne réagit pas quand j'appuis sur l'un des deux boutons (rien ne s'affiche). Par contre quand je met ma méthode: - (void)alertView:(AlertRenamePronpt *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
dans mon viewController là elle fonctionne.
Du coup auriez-vous une idée, pour qu'elle fonctionne en gardant la méthode dans le "FeatureRename"?
J'ai l'impression que cette méthode ne fonctionne que dans le viewController qui supporte l'AlertView
voila je vous présente un petit problème que j'ai rencontré:
Dans mon viewController, j'ai une méthode qui me permet d'initialiser une classe "RenameFeature" de type NSObject en lui passant en paramètre une instance de mon viewController et d'exécuter une méthode de cette classe.
viewController.m:
-(void) exec<br />
{<br />
RenameFeature *Rename=[[RenameFeature alloc] init:self];<br />
[Rename executeAlertRename];<br />
}
la méthode de RenameFeature que j'exécute, me permet d'afficher une AlertView que j'ai customisé.
RenameFeature.h:
[color=#b41ca4]@interface[/color][color=#000000] RenameFeature : [/color]NSObject[color=#000000]<[/color]UIAlertViewDelegate[color=#000000]>[/color]<br />
{<br />
[color=#578187]UIViewController[/color] * ViewController;<br />
}<br />
<br />
<br />
- ([color=#b41ca4]id[/color]) init: ([color=#578187]UIViewController[/color] *)VC;<br />
-([color=#b41ca4]void[/color])excecuteAlertRename;<br />
<br />
[color=#b41ca4]@end
[/color]RenameFeature.m:
[/color][color=#73492c]#import [/color]"RenameFeature.h"[/color]<br />
[color=#c72c25][color=#73492c]#import [/color]"AlertRenamePronpt.h"[/color]<br />
<br />
[color=#b41ca4]@implementation[color=#000000] RenameFeature[/color][/color]<br />
<br />
- ([color=#B41CA4]id[/color]) init: ([color=#578187]UIViewController[/color] *)VC<br />
{<br />
[color=#b41ca4]if[/color] ( [color=#b41ca4]self[/color] = [[color=#b41ca4]super[/color] [color=#401082]init[/color]] )<br />
{<br />
[color=#578187]ViewController=VC;[/color]<br />
}<br />
[color=#b41ca4]return[/color] [color=#b41ca4]self[/color]; <br />
}<br />
<br />
-([color=#b41ca4]void[/color])excecuteAlertRename<br />
{<br />
[color=#38595d][color=#000000] [[/color][color=#b41ca4]self[/color][color=#000000] [/color]raisePromptView[color=#000000]:[/color][color=#c72c25]@"Renommer"[/color][color=#000000] [/color]message[color=#000000]:[/color][color=#c72c25]@"Veuillez entrer un nouveau nom : "[/color][color=#000000] [/color]textfieldPositionY[color=#000000]:[/color][color=#3d01d9]75[/color][color=#000000] [/color]delegate[color=#000000]:[/color][color=#578187]ViewController[/color][color=#000000]];[/color][/color]<br />
}<br />
<br />
<br />
-([color=#b41ca4]void[/color])raisePromptView:([color=#7134aa]NSString[/color]*)title message:([color=#7134aa]NSString[/color]*)message textfieldPositionY:([color=#7134aa]CGFloat[/color])posY delegate:(UIViewController *)viewController<br />
{<br />
[color=#38595d][color=#000000] [/color][color=#578187]AlertPronpt[/color][color=#000000] * prompt = [[[/color][color=#578187]AlertRenamePronpt[/color][color=#000000] [/color][color=#401082]alloc[/color][color=#000000]] [/color]initWithTitle[color=#000000]:title [/color]message[color=#000000]:message [/color]delegate[color=#000000]:viewController [/color]cancelButtonTitle[color=#000000]:[/color][color=#c72c25]@"ANNULER"[/color][color=#000000] [/color]okButtonTitle[color=#000000]:[/color][color=#c72c25]@"OK"[/color][color=#000000] [/color]textfieldPosY[color=#000000]:posY];[/color][/color]<br />
[prompt [color=#401082]show[/color]];<br />
}<br />
<br />
<br />
- ([color=#b41ca4]void[/color])alertView:([color=#578187]AlertRenamePronpt[/color] *)actionSheet clickedButtonAtIndex:([color=#7134aa]NSInteger[/color])buttonIndex<br />
{<br />
[color=#b41ca4]if[/color](buttonIndex==[color=#3d01d9]0[/color]){<br />
[color=#401082]NSLog[/color]([color=#c72c25]@"ici"[/color]);<br />
}else{<br />
NSLog(@"là ");<br />
}<br />
}<br />
<br />
[color=#b41ca4][color=#000000]@end
AlertPrompt.h:
[color=#73492c]#import [/color]<Foundation/Foundation.h><br />
<br />
[color=#b41ca4]@interface[/color] AlertPronpt : [color=#7134aa]UIAlertView[/color] {<br />
[color=#7134aa]UITextField[/color] *textField;<br />
}<br />
<br />
[color=#b41ca4]@property[color=#000000] ([/color]nonatomic[color=#000000], [/color]retain[color=#000000]) [/color][color=#7134aa]UITextField[/color][color=#000000] *textField;[/color][/color]<br />
[color=#b41ca4]@property[/color] ([color=#b41ca4]readonly[/color]) [color=#7134aa]NSString[/color] *enteredText;<br />
- ([color=#b41ca4]id[/color])initWithTitle:([color=#7134aa]NSString[/color] *)title message:([color=#7134aa]NSString[/color] *)message delegate:([color=#b41ca4]id[/color])delegate cancelButtonTitle:([color=#7134aa]NSString[/color] *)cancelButtonTitle okButtonTitle:([color=#7134aa]NSString[/color] *)okButtonTitle textfieldPosY:([color=#7134aa]CGFloat[/color])posY;<br />
<br />
[color=#b41ca4]@end[color=#000000]
[/color][/color]AlertPrompt.m:
[/color][color=#73492c]#import [/color]"AlertRenamePronpt.h"[/color]<br />
<br />
[color=#b41ca4]@implementation[/color] AlertRenamePronpt<br />
<br />
[color=#b41ca4]@synthesize[/color] textField;<br />
[color=#b41ca4]@synthesize[/color] enteredText;<br />
<br />
- ([color=#b41ca4]id[/color])initWithTitle:([color=#7134aa]NSString[/color] *)title message:([color=#7134aa]NSString[/color] *)message delegate:([color=#b41ca4]id[/color])delegate cancelButtonTitle:([color=#7134aa]NSString[/color] *)cancelButtonTitle okButtonTitle:([color=#7134aa]NSString[/color] *)okayButtonTitle textfieldPosY:([color=#7134aa]CGFloat[/color])posY {<br />
<br />
[color=#b41ca4]if[/color] ([color=#b41ca4]self[/color] = [[color=#b41ca4]super[/color] [color=#401082]initWithTitle[/color]:title [color=#401082]message[/color]:[[color=#7134aa]NSString[/color] [color=#401082]stringWithFormat[/color]:[color=#c72c25]@"%@\n\n\n"[/color], message] [color=#401082]delegate[/color]:delegate [color=#401082]cancelButtonTitle[/color]:cancelButtonTitle [color=#401082]otherButtonTitles[/color]:okayButtonTitle, [color=#b41ca4]nil[/color]]) {<br />
[color=#7134aa]UITextField[/color] *theTextField = [[[color=#7134aa]UITextField[/color] [color=#401082]alloc[/color]] [color=#401082]initWithFrame[/color]:[color=#401082]CGRectMake[/color]([color=#3d01d9]20.0[/color], posY, [color=#3d01d9]245.0[/color], [color=#3d01d9]25.0[/color])];<br />
[theTextField [color=#401082]setBackgroundColor[/color]:[[color=#7134aa]UIColor[/color] [color=#401082]whiteColor[/color]]];<br />
[[color=#b41ca4]self[/color] [color=#401082]addSubview[/color]:theTextField];<br />
[color=#b41ca4]self[/color].[color=#578187]textField[/color] = theTextField;<br />
[color=#401082][color=#000000] [/color][color=#7134aa]CGAffineTransform[/color][color=#000000] translate = [/color]CGAffineTransformMakeTranslation[color=#000000]([/color][color=#3d01d9]0.0[/color][color=#000000], -[/color][color=#3d01d9]20.0[/color][color=#000000]);[/color][/color]<br />
[[color=#b41ca4]self[/color] [color=#401082]setTransform[/color]:translate];<br />
}<br />
[color=#b41ca4][color=#000000] [/color]return[color=#000000] [/color]self[color=#000000];[/color][/color]<br />
}<br />
<br />
- ([color=#b41ca4]void[/color])show {<br />
[[color=#b41ca4]super[/color] [color=#401082]show[/color]];<br />
[color=#401082][color=#000000] [[/color][color=#578187]textField[/color][color=#000000] [/color]becomeFirstResponder[color=#000000]];[/color][/color]<br />
}<br />
<br />
- ([color=#7134aa]NSString[/color] *)enteredText {<br />
[color=#578187][color=#000000] [/color][color=#b41ca4]return[/color][color=#000000] [/color]textField[color=#000000].[/color][color=#7134aa]text[/color][color=#000000];[/color][/color]<br />
}<br />
<br />
[color=#b41ca4]@end[/color][color=#000000]
Le soucis est que ma fenêtre d'alerte customisé s'affiche bien, par contre elle ne réagit pas quand j'appuis sur l'un des deux boutons (rien ne s'affiche). Par contre quand je met ma méthode: - (void)alertView:(AlertRenamePronpt *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
dans mon viewController là elle fonctionne.
Du coup auriez-vous une idée, pour qu'elle fonctionne en gardant la méthode dans le "FeatureRename"?
J'ai l'impression que cette méthode ne fonctionne que dans le viewController qui supporte l'AlertView
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
En occurrence, ça serait UIAlertViewStylePlainTextInput qui t'intéresserait.
Très honnêtement si il s'agit d'un projet perso que tu réalise, je te conseille de faire du iOS 5 minimum dès maintenant.
Pour le style c'est parfais, sauf que j'ai toujours ce même problème pour capter l'évènement de l'utilisateur quand il clique sur l'un des deux boutons avec la méthode:
qui se trouve dans ma classe "RenameFeature".
Tu sais ce qu'est un delegate, non ?
Tu as réfléchi pourquoi la méthode de delegate était appelée sur le viewController ? Tu as réfléchi à ce que tu passais au paramètre "delegate" de ta méthode d'initialisation de UIAlertView ? /wink.png' class='bbc_emoticon' alt=';)' />
Mais j'ai toujours le même problème:
Concrètement, ton objet a donc été désalloué de la mémoire entre temps.
En gros comment éviter que mon objet ne soit désalloué ?
Sinon, essaye cela :
Dans ViewController, déclare une propriété RenameFeature
Ensuite, tu la synthétise
Pour finir ...
ça devrait fonctionner.
iDevKeno
Merci pour le coup de main.