UIPickerView UIButton в viewForRow не отвечает - PullRequest
0 голосов
/ 13 октября 2011

Кнопка не отвечает в 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 не вызывает после нажатия кнопки.У кого-нибудь есть идея, почему и какое решение?

Мне кажется, кнопка даже не нажата, только ячейка становится активной.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2011

Я нахожу пути.просто в

- (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;
     }

Создать пользовательский вид с помощью кнопки

Как это

- (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;

}

И использовать:

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

Или:

 -(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];
     }
}
0 голосов
/ 13 октября 2011

кадр (ширина) вашей кнопки deleteButtonUr превышает кадр rowView. Поэтому увеличивайте кадр вида следующим образом,

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

в противном случае настройте метку и кадр deleteButton с помощью в кадре вашего rowView

...