Cell Imageview在长按时发生变化

时间:2012-12-31 16:45:00

标签: ios uitableview uiimageview uigesturerecognizer

试着遵循这个:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath      *)indexPath//tableview delegate
{
    //here is the code to create and customize a cell
    //adding gesture recognizer
    UILongPressGestureRecognizer *recognizer = [[UILongPressGestureRecognizer alloc]
    initWithTarget:self action:@selector(your_function)];
    recognizer.minimumPressDuration = 1.0; //seconds
    [cell addGestureRecognizer:lpgr];
    [lpgr release];
    return  cell;
}

-(void)your_function
{
    NSlog(@"detecting long press");
}

这是我的问题:

如何在长按手势后更改单元格imageview?

我想我需要在-(void)your_function {}中插入“更改单元格”代码。

问题更新

将此用于实物:

当我点击一个单元格(longpress)时会显示4个自定义项目,但当我选择其中一个时,应用程序崩溃。 (如果删除:(Cell *)单元格和cell.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@“ICUbedRED.png”]];它有效...我的意思是alertView出现,但当然图像不要不要改变。

- (void)longPress:(UILongPressGestureRecognizer *)recognizer {
    if (recognizer.state == UIGestureRecognizerStateBegan) {
        Cell *cell = (Cell *)recognizer.view;
        [cell becomeFirstResponder];

        UIMenuItem *highDep = [[UIMenuItem alloc] initWithTitle:@"High Dependency" action:@selector(hiDep:)];
        UIMenuItem *lowDep = [[UIMenuItem alloc] initWithTitle:@"Low Dependency" action:@selector(lowDep:)];
        UIMenuItem *booked = [[UIMenuItem alloc] initWithTitle:@"Booked"     action:@selector(booked:)];
        UIMenuItem *free = [[UIMenuItem alloc] initWithTitle:@"Free" action:@selector(free:)];

            UIMenuController *menu = [UIMenuController sharedMenuController];
    [menu setMenuItems:[NSArray arrayWithObjects:booked, highDep, lowDep, free, nil]];
        [menu setTargetRect:cell.frame inView:cell.superview];
        [menu setMenuVisible:YES animated:YES];



   }

}

空洞是:

 - (void)hiDep:(Cell*)cell
 {
    NSLog(@"Bed is HiDep");

    cell.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"ICUbedRED.png"]];




     UIAlertView *testAlert = [[UIAlertView alloc] initWithTitle:@"This Bed is High Dependency"
                                                    message:@""
                                                   delegate:self cancelButtonTitle:@"OK"   otherButtonTitles:nil, nil];



    [testAlert show];
    [testAlert release];


  }

- (void)lowDep:(Cell*)cell
 {...}

 - (void)free:(Cell*)cell
 {...}

 - (void)booked:(Cell*)cell
 {...}

,细胞构建方法是:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

     static NSString *identifier = @"Cell";
    Cell *cvc = (Cell *)[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

    int i = indexPath.row%[labelArray count];
    number = i;

    UILongPressGestureRecognizer *recognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];



    [cvc addGestureRecognizer:recognizer];


    cvc.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"icubed.png"]];
    cvc.label.text =  [labelArray objectAtIndex:number];

       return cvc;


}

1 个答案:

答案 0 :(得分:-1)

将方法更改为:

-(void)your_function:(UITableViewCell*)cell
{
    cell.imageView = .....
}

识别器会将单元格作为印刷机的发件人发送,并将其传递给您的方法。

注意您必须将识别器更改为:

UILongPressGestureRecognizer *recognizer = [[UILongPressGestureRecognizer alloc]
initWithTarget:self action:@selector(your_function:)];

添加到方法的末尾,因为您的方法会获得参数。