2010-11-23 32 views
-1
for (int i=0;i<[tableDataSource count];i++) 
{ 
     NSDictionary *dict = [tableDataSource objectAtIndex:i]; 
     rowText = [dict objectForKey:@"title"]; 

     UIButton *btn = [UIButton buttonWithType: UIButtonTypeRoundedRect]; 
     [btn setTitle:rowText forState:UIControlStateNormal]; 
     [btn addTarget:self action:@selector(myActionbtnText:) forControlEvents:UIControlEventTouchUpInside]; 
     btn.frame = CGRectMake(60, 40+2*(40*i), 200, 40); 
     btn.alpha = 0.81; 

     [self.view addSubview:btn]; 
} 

J'ai une erreur lors de l'affectation Action sur le bouton dynamique mon action est indiquée Ci-dessous, comment passer l'objet/paramètre lorsque l'événement bouton se produit.application Crash lors de l'assignation de plusieurs touches argu fun au bouton dynamique

-(void) myAction:(NSString *)btnText; 
{ 
    NSLog(@"%@ Button Clicked",btnText); 
} 

Répondre

1

Essayez ceci:

for (int i=0;i<[tableDataSource count];i++) 
{ 
    UIButton *btn = [UIButton buttonWithType: UIButtonTypeRoundedRect]; 
    [btn setTitle:rowText forState:UIControlStateNormal]; 
    [btn addTarget:self action:@selector(myActionbtnText:) forControlEvents:UIControlEventTouchUpInside]; 
    btn.tag = i; 
    btn.frame = CGRectMake(60, 40+2*(40*i), 200, 40); 
    btn.alpha = 0.81; 

    [self.view addSubview:btn]; 
} 

-(void) myAction:(UIButton*)sender { 
    NSDictionnary *dict = [tableDataSource objectAtIndex:sender.tag]; 
    NSString* rowText = (NSString*)[dict objectForKey:@"title"]; 
    NSLog(@"%@ Button Clicked",rowText); 
} 
+0

Merci MathieuF Et ça ne défile pas quand le bouton r augmente en NO. Même je l'ai mis sur ScrollView. – AJPatel

1

Il y a plusieurs choses mal avec votre solution.

  1. UIButton ne répond pas à addTarget:action:withObject:forControlEvents: mais plutôt addTarget:action:forControlEvents. C'est pourquoi votre application plante.
  2. Le sélecteur doit être @selector(myAction:). Le paramètre ne doit pas être inclus.
  3. Je suis à peu près sûr que ça ne marcherait pas car au moment où le bouton est pressé rowText sera hors de portée et n'est plus disponible. C'est pourquoi vous devriez aller avec la solution @MathieuF (Assurez-vous juste de spécifier le sélecteur correctement).
+0

Merci Robert mais si je dois passer paramètre/argument à cette fonction que ce que je peux faire. Et il ne défile pas lorsque le bouton r augmente en NO. Même je l'ai mis sur ScrollView. – AJPatel