如何在Objective C中获取枚举的数值,或者使用数值设置枚举?

时间:2017-02-08 10:37:06

标签: ios objective-c uicollectionview uicollectionviewcell

我有这段代码在集合视图中添加新单元格。委托和数据源已正确设置。但是集合视图单元格没有显示任何内容。好吧,当我调试它时,它显示单元格已创建,但单元格除了UIView之外什么都没有,我希望它应该包含一个UIButton,里面有UIImageView

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setImgGallery:[[NSMutableArray alloc] init]];
    [[self cvPictureGallery] registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"new"];
    [[self cvPictureGallery] registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"review"];

    // add 5 UIImage test to imgGallery.
    for (int i = 0; i < 5; i++) {
        [[self imgGallery] addObject:[UIImage named:@"test.png"]];
    }
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return MIN ([[self imgGallery] count] + 1, 5);
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    if ([indexPath row] == [[self imgGallery] count]) { // show the camera icon
        UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"new" forIndexPath:indexPath];

        if (cell == nil) {
            /*
             cell
             - contentView
               - button
                 - camera icon
            */

            cell = [[UICollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];

            UIImageView * imgCameraIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"camera.png"]];
            [imgCameraIcon setFrame:CGRectMake(0, 0, 50, 50)];
            [imgCameraIcon setContentMode:UIViewContentModeScaleAspectFit];

            UIButton * btnCamera = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
            [btnCamera addSubview:btnCamera];
            [btnCamera addTarget:self action:@selector(openCameraTapped) forControlEvents:UIControlEventTouchUpInside];
            [imgCameraIcon setCenter:CGPointMake([btnCamera width] / 2, [btnCamera height] / 2)];

            [cell addSubview:btnCamera];
            [cell setBackgroundColor:[UIColor whiteColor]];
            [collectionView registerClass:[cell class] forCellWithReuseIdentifier:@"new"];
        }
        return cell;
    }
    else {
        UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"review" forIndexPath:indexPath];
        if (cell == nil) {
            /*
             cell
             - contentView
               - button
                 - image selected
            */

            cell = [[UICollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];

            UIImageView * imgSelected = [[UIImageView alloc] initWithImage:[[self imgGallery] objectAtIndex:[indexPath row]]];
            [imgSelected setFrame:CGRectMake(0, 0, 100, 100)];
            [imgSelected setContentMode:UIViewContentModeScaleAspectFill];
            [imgSelected setTag:1];

            UIButton * btnCamera = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
            [btnCamera addSubview:btnCamera];
            [btnCamera addTarget:self action:@selector(imageTapped) forControlEvents:UIControlEventTouchUpInside];
            [imgSelected setCenter:CGPointMake([btnCamera width] / 2, [btnCamera height] / 2)];

            [cell addSubview:btnCamera];
            [collectionView registerClass:[cell class] forCellWithReuseIdentifier:@"review"];
        }
        return cell;
    }
}

我已经使用了这些质量保证的参考资料:

编辑:根据接受的答案和讨论,这是我更新的代码,但仍然没有显示任何内容:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    if ([indexPath row] == [[self imgGallery] count]) { // show the camera icon
        UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"new" forIndexPath:indexPath];

        if (cell == nil) {
            /*
             cell
             - contentView
               - button
                 - camera icon
            */

            cell = [[UICollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];

            UIImageView * imgCameraIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"camera.png"]];
            [imgCameraIcon setFrame:CGRectMake(0, 0, 50, 50)];
            [imgCameraIcon setContentMode:UIViewContentModeScaleAspectFit];
            [imgCameraIcon setTag:1];

            UIButton * btnCamera = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
            [btnCamera addSubview:imgCameraIcon];
            [btnCamera addTarget:self action:@selector(openCameraTapped) forControlEvents:UIControlEventTouchUpInside];
            [btnCamera setTag:2];
            [imgCameraIcon setCenter:CGPointMake([btnCamera width] / 2, [btnCamera height] / 2)];

            [cell addSubview:btnCamera];
            [cell setBackgroundColor:[UIColor whiteColor]];
            [collectionView registerClass:[cell class] forCellWithReuseIdentifier:@"new"];
        }

        UIImageView * imgCameraIcon = (UIImageView *) [cell viewWithTag:1];
        [imgCameraIcon setImage:[UIImage imageNamed:@"camera.png"]];

        NSLog (@"Subview count:%lu", (unsigned long)[[cell subviews] count]);

        return cell;
    }
    else {
        UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"review" forIndexPath:indexPath];
        if (cell == nil) {
            /*
             cell
             - contentView
               - button
                 - image selected
            */

            cell = [[UICollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];

            UIImageView * imgSelected = [[UIImageView alloc] initWithImage:[[self imgGallery] objectAtIndex:[indexPath row]]];
            [imgSelected setFrame:CGRectMake(0, 0, 100, 100)];
            [imgSelected setContentMode:UIViewContentModeScaleAspectFill];
            [imgSelected setClipsToBounds:YES];
            [imgSelected setTag:1];

            UIButton * btnImage = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
            [btnImage addSubview:imgSelected];
            [btnImage addTarget:self action:@selector(imageTapped) forControlEvents:UIControlEventTouchUpInside];
            [btnImage setTag:2];
            [imgSelected setCenter:CGPointMake([btnImage width] / 2, [btnImage height] / 2)];

            [cell addSubview:btnImage];
        }

        UIImageView * imgSelected = (UIImageView *) [cell viewWithTag:1];
        [imgSelected setImage:[[self imgGallery] objectAtIndex:[indexPath row]]];

        NSLog (@"Subview count:%lu", (unsigned long)[[cell subviews] count]);

        return cell;
    }
}

子视图计数的结果始终为1.下面是工作计数,但子视图计数每次都在增加。

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    if ([indexPath row] == [[self imgGallery] count]) { // show the camera icon
        UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"new" forIndexPath:indexPath];

        if (cell == nil) {
            /*
             cell
             - contentView
               - button
                 - camera icon
            */

            cell = [[UICollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
        }

        UIImageView * imgCameraIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"camera.png"]];
        [imgCameraIcon setFrame:CGRectMake(0, 0, 50, 50)];
        [imgCameraIcon setContentMode:UIViewContentModeScaleAspectFit];

        UIButton * btnCamera = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
        [btnCamera addSubview:imgCameraIcon];
        [btnCamera addTarget:self action:@selector(openCameraTapped) forControlEvents:UIControlEventTouchUpInside];
        [imgCameraIcon setCenter:CGPointMake([btnCamera width] / 2, [btnCamera height] / 2)];

        [cell addSubview:btnCamera];
        [cell setBackgroundColor:[UIColor whiteColor]];
        [collectionView registerClass:[cell class] forCellWithReuseIdentifier:@"new"];

        NSLog (@"Subview count:%lu", (unsigned long)[[cell subviews] count]);

        return cell;
    }
    else {
        UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"review" forIndexPath:indexPath];
        if (cell == nil) {
            /*
             cell
             - contentView
               - button
                 - image selected
            */

            cell = [[UICollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
        }

        UIImageView * imgSelected = [[UIImageView alloc] initWithImage:[[self imgGallery] objectAtIndex:[indexPath row]]];
        [imgSelected setFrame:CGRectMake(0, 0, 100, 100)];
        [imgSelected setContentMode:UIViewContentModeScaleAspectFill];
        [imgSelected setClipsToBounds:YES];
        [imgSelected setTag:1];

        UIButton * btnImage = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
        [btnImage addSubview:imgSelected];
        [btnImage addTarget:self action:@selector(imageTapped) forControlEvents:UIControlEventTouchUpInside];
        [imgSelected setCenter:CGPointMake([btnImage width] / 2, [btnImage height] / 2)];

        [cell addSubview:btnImage];
        [collectionView registerClass:[cell class] forCellWithReuseIdentifier:@"review"];

        NSLog (@"Subview count:%lu", (unsigned long)[[cell subviews] count]);

        return cell;
    }
}

2 个答案:

答案 0 :(得分:2)

我不确定您的问题的标题是否与您的查询有关,但请更换一行:

[btnCamera addSubView:btnCamera] 

[btnCamera addSubView:imgCameraIcon]

答案 1 :(得分:2)

我认为你写错了代码来创建单元格。请更新您的代码,如下所示,并查看输出

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    if ([indexPath row] == [[self imgGallery] count]) { // show the camera icon
        UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"new" forIndexPath:indexPath];

        if (cell == nil) {
            /*
             cell
             - contentView
             - button
             - camera icon
             */

            cell = [[UICollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
        }
        UIImageView * imgCameraIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"camera.png"]];
        [imgCameraIcon setFrame:CGRectMake(0, 0, 50, 50)];
        [imgCameraIcon setContentMode:UIViewContentModeScaleAspectFit];

        UIButton * btnCamera = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
        [btnCamera addSubview:btnCamera];
        [btnCamera addTarget:self action:@selector(openCameraTapped) forControlEvents:UIControlEventTouchUpInside];
        [imgCameraIcon setCenter:CGPointMake([btnCamera width] / 2, [btnCamera height] / 2)];

        [cell addSubview:btnCamera];
        [cell setBackgroundColor:[UIColor whiteColor]];
        [collectionView registerClass:[cell class] forCellWithReuseIdentifier:@"new"];

        return cell;
    }
    else {
        UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"review" forIndexPath:indexPath];
        if (cell == nil) {
            /*
             cell
             - contentView
             - button
             - image selected
             */

            cell = [[UICollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
        }
        UIImageView * imgSelected = [[UIImageView alloc] initWithImage:[[self imgGallery] objectAtIndex:[indexPath row]]];
        [imgSelected setFrame:CGRectMake(0, 0, 100, 100)];
        [imgSelected setContentMode:UIViewContentModeScaleAspectFill];
        [imgSelected setTag:1];

        UIButton * btnCamera = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
        [btnCamera addSubview:btnCamera];
        [btnCamera addTarget:self action:@selector(imageTapped) forControlEvents:UIControlEventTouchUpInside];
        [imgSelected setCenter:CGPointMake([btnCamera width] / 2, [btnCamera height] / 2)];

        [cell addSubview:btnCamera];
        [collectionView registerClass:[cell class] forCellWithReuseIdentifier:@"review"];
        return cell;
    }
}