2013-02-14 30 views
10

Tôi đang sử dụng UICollectionView để hiển thị menu và các mục đang được chọn theo cách RẤT lạ.Lạ UICollectionView Hành vi lựa chọn

Đây là dữ liệu tĩnh của tôi mà populates họ:

self.menuItems = @[@{@"text" : @"First", @"image" : @"180-stickynote.png"}, 
        @{@"text" : @"Second", @"image" : @"180-stickynote.png"}, 
        @{@"text" : @"Third", @"image" : @"180-stickynote.png"}, 
        @{@"text" : @"Fourth", @"image" : @"180-stickynote.png"}, 
        @{@"text" : @"Fifth", @"image" : @"180-stickynote.png"}, 
        @{@"text" : @"Sixth", @"image" : @"180-stickynote.png"}]; 

Và các nhà cung cấp di động, nơi mà các lớp con tùy chỉnh chỉ được gắn vào các tế bào nguyên mẫu và có một UILabelUIImageView:

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

    CUMenuCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MenuCell" forIndexPath:indexPath]; 

    NSDictionary *cellInfo = [self.menuItems objectAtIndex:indexPath.row]; 

    cell.imageView.image = [UIImage imageNamed:[cellInfo valueForKey:@"image"]]; 

    cell.label.text = [cellInfo valueForKey:@"text"]; 

    return cell; 
} 

Đây là phương thức hàng đã chọn, đăng nhập tiêu đề và hàng của mục (tất cả đều ở phần 0):

- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"%@: %d", [[self.menuItems objectAtIndex:indexPath.row] valueForKey:@"text"], indexPath.row); 
} 

Cuối cùng, các ảnh chụp màn hình của trình đơn của tôi:

enter image description here

Đây là nhật ký khi tôi chọn các mục từ đầu tiên đến thứ sáu, sau đó trở lại từ thứ sáu đến đầu tiên (Thứ nhất, thứ hai, thứ ba, thứ tư, thứ năm, thứ sáu, thứ sáu, thứ năm, thứ tư, thứ ba, thứ hai, First) (12 tổng vòi, lưu ý rằng vòi nước đầu tiên thậm chí không đăng ký, cũng không vòi thứ sáu giây):

------------------------------------- FIRST TAP ON FIRST HERE 
2013-02-13 19:38:37.343 App[1383:c07] First: 0 // second tap, on Second 
2013-02-13 19:38:38.095 App[1383:c07] Second: 1 // third tap, on Third 
2013-02-13 19:38:38.678 App[1383:c07] Third: 2 // fourth tap, on Fourth 
2013-02-13 19:38:39.375 App[1383:c07] Fourth: 3 // fifth tap, on Fifth 
2013-02-13 19:38:40.167 App[1383:c07] Fifth: 4 // so on 
2013-02-13 19:38:41.751 App[1383:c07] Sixth: 5 
------------------------------------- SECOND TAP ON SIXTH HERE 
2013-02-13 19:38:42.654 App[1383:c07] Fifth: 4 
2013-02-13 19:38:43.318 App[1383:c07] Fourth: 3 
2013-02-13 19:38:44.495 App[1383:c07] Third: 2 
2013-02-13 19:38:45.071 App[1383:c07] Second: 1 

Trả lời

52

đó là bởi vì bạn đang sử dụng phương thức didDeselectItemAtIndexPath: thay vì didSelectItemAtIndexPath:. Lỗi dễ thực hiện, đặc biệt nếu bạn đang sử dụng hoàn thành mã khi nhập mã.

+1

Rất tiếc. Tôi có thể hét lên một chút, quá muộn rồi. Cảm ơn bạn rất nhiều, chân thành! – Josh

+0

@Josh, không sao, đó là một sai lầm mà tôi đã làm nhiều lần. – rdelmar

+0

Chà. Thực hiện sai lầm này quá. Nghĩ rằng có một vài pháp sư tối trong công việc. Nhưng không. Đã có bản thân mình bị lừa thời gian lớn :) – villapossu