0

長押しジェスチャーの後にセルのイメージビューを変更するにはどうすればよいですか?

これを使用すると、セルをクリックすると (長押し)、4 つのカスタマイズされたアイテムが表示されますが、そのうちの 1 つを選択するとアプリがクラッシュします。(:(Cell*)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
 {.
    cell.imageView.image = [UIImage imageNamed:[NSString     stringWithFormat:@"ICUbedYELLOW.png"]];
..}

 - (void)free:(Cell*)cell
 {..
    cell.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"ICUbedGREEN.png"]];
.}

 - (void)booked:(Cell*)cell
 {..
    cell.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"ICUbedBLUE.png"]];
.}

セル構築方法は次のとおりです。

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


}
4

1 に答える 1

0

@dottorfeelgoodそれはクラッシュしています

cell.imageView.image = [UIImage imageNamed:[NSString stringWi......

なぜなら、オブジェクトは次のようなメソッドのパラメーターとして返されるからです

  • (void)lowDep:(Cell*)cell はクラス Cell のものではありません。返されるパラメータはクラス UIMenuItem のものです。CellではなくmenuItemsをクリックしているためです。

現在行っていることを行う代わりに、デフォルトで UICollectionView によって提供される UICollectionCell ソリューションで MenuItems と対応するアクションを使用できます。このチュートリアルはこちらで確認できます。

3 つのデリゲート メソッドを実装するだけで、

// These methods provide support for copy/paste actions on cells.
// All three should be implemented if any are.
- (BOOL)collectionView:(UICollectionView *)collectionView shouldShowMenuForItemAtIndexPath:(NSIndexPath *)indexPath;
- (BOOL)collectionView:(UICollectionView *)collectionView canPerformAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender;
- (void)collectionView:(UICollectionView *)collectionView performAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender;

必要なカスタム menuItems を ViewdidLoad の sharedMenuController に設定します。

これがお役に立てば幸いです。私の悪い文の形成を許してください。

于 2013-01-25T09:22:20.753 に答える