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

How to get numeric value of an enum, or setting an enum with numeric value, in Objective C?

我有这段代码可以在集合视图上添加新单元格。委托和数据源已正确设置。但是集合视图单元格没有显示任何内容。好吧,当我调试它时,它显示单元格已创建,但单元格只包含一个 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;
    }
}

我在这些 QA 上使用了参考:

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

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

我不确定你的问题标题是否与你的查询相关,但请替换为:

[btnCamera addSubView:btnCamera] 

[btnCamera addSubView:imgCameraIcon]

我认为您编写了错误的代码来创建单元格。请像下面这样更新您的代码并查看输出

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