Search code examples
iphonesdkuibuttonuipicker

UIPickerView UIButton in viewForRow doesn't respond


Button doesn't respond in viewForRow:

UIView * rowView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 44)] autorelease];

UIButton* deleteButton = [[[UIButton alloc]init]autorelease];
deleteButton.frame = CGRectMake(200, 10, 20,20);
[deleteButton setImage:[UIImage imageNamed:@"IconTrash.png"] forState: UIControlStateNormal];
[deleteButton addTarget: self action:@selector(removeCellAtIndexPath:) forControlEvents: UIControlEventTouchUpInside];

UILabel *labelText = [[UILabel alloc]init];
labelText.text =  [NSString stringWithFormat:@"%@",[[localFlagNotes objectAtIndex:row] value]];
labelText.font = [UIFont fontWithName:@"Arial" size: 24];
labelText.frame = CGRectMake(0, 10, 200, 28);
labelText.backgroundColor = [UIColor clearColor];

[rowView addSubview:labelText];
[rowView addSubview:deleteButton];
[labelText release];
return rowView;

removeCellAtIndexPath doesn't call after press button. Does anyone have some idea why and some solution?

I think button even not pressed only cell become active.


Solution

  • I find ways. just in

    - (UIView*)pickerView:(UIPickerView *)pickersView viewForRow:(NSInteger)row
              forComponent:(NSInteger)component reusingView:(UIView *)view
         {
               PickerCustomView * rowView = [[PickerCustomView alloc]initWithFrame:CGRectMake(5, 0, 310, 50) withText:[[localFlagNotes objectAtIndex:row] value]] ;
               rowView.delegate = self;
               return rowView;
         }
    

    Create custom View with button

    Like this

    - (id)initWithFrame:(CGRect)frame withText:(NSString*)text
    {
       self = [super initWithFrame:frame];
       if (self) 
    {
         deleteButton = [[UIButton alloc]init];
    
        [deleteButton setImage:[UIImage imageNamed:@"IconTrash"] forState: UIControlStateNormal];
        [deleteButton addTarget:self action:@selector(deleteButtonAction:) forControlEvents:UIControlEventTouchUpInside];
        deleteButton.frame = CGRectMake(250, 10, 35,35);
    
        textLabel = [[UILabel alloc]init];
        originText = text;
        NSString *trimmed = [text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
        textLabel.text =  trimmed;
        textLabel.font = [UIFont fontWithName:@"Arial" size: 24];
        textLabel.frame = CGRectMake(20, 10, 230, 28);
        textLabel.backgroundColor = [UIColor clearColor];
    
        [self addSubview:textLabel];
        [self addSubview:deleteButton];      
    
    }
    return self;
    

    }

    And use:

    -(void)deleteButtonAction:(id)sender
     {
         [delegate removeCellAtIndexPath:originText];
     }
    

    Or:

     -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        UITouch *touch = [[event allTouches] anyObject];
        CGPoint location = [touch locationInView:touch.view];
    
        if ( (location.x > 10 && location.x < 38) && (location.y > 240 && location.y < 265)    )
         {
            [self deleteButtonAction:nil];
         }
    }