gpt4 book ai didi

ios - 以编程方式将 UIButtons 添加到 UICollectionView 单元格的 uiimage

转载 作者:行者123 更新时间:2023-11-29 12:33:53 25 4
gpt4 key购买 nike

我有一个 UIViewController,其中以编程方式在其中创建了一个 UICollectionView 图片库。我想在 UICollectionView 单元格的每个 uiimage 上添加一个按钮: CMFViewController.h.m 文件中用于将按钮添加到 imageview 的代码是:

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

CMFGalleryCell *cell = (CMFGalleryCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];

NSString *imageName = [self.dataArray objectAtIndex:indexPath.row];
[cell setImageName:imageName];
// [[cell myButton] addTarget:self action:@selector(myClickEvent:event) forControlEvents:UIControlEventTouchUpInside];

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(80.0, 210.0, 100.0, 20.0);
[button addTarget:self action:@selector(show) forControlEvents:UIControlEventTouchUpInside];
[button setTitle:@"ShowView" forState:UIControlStateNormal];

// NSMutableArray *buttonArray = [NSMutableArray arrayWithCapacity:100];

// for (int i = 0; i < 4; i++) {
// NSUInteger index = arc4random() % 4;


// newButton.frame = CGRectMake( 5, 5, 10, 10); // Whatever position and size you need...

// UIImage *buttonImage = [UIImage imageNamed:[self.dataArray objectAtIndex:indexPath.row]];
//[newButton setBackgroundImage:buttonImage forState:UIControlStateNormal];

// [buttonArray addObject:newButton];
// }
// newButton = buttonArray; // Where myButtons is a NSArray property of your class, to store references to the buttons.

// [newButton addTarget:self action:@selector(loadImages:) forControlEvents:UIControlEventTouchUpInside];
//[newButton addTarget:self action:@selector(updateCell) forControlEvents:UIControlEventTouchUpInside];

[cell updateCell];

return cell;

}

我想从以下链接的代码中获得帮助 adding-a-uibutton-to-a-uicollectionview

UIButton in cell in collection view not receiving touch up inside event请给我你的建议并帮助我解决这个问题。

从这个链接你可以下载source codeCreating a Paged Photo Gallery With a UICollectionView : 他们我想将下一个和上一个按钮放在屏幕每个图像的中间线上

最佳答案

为了实现下一个和上一个按钮,不要将它添加到每个图像上,最好将它添加到 Collection View 中,chinttu-maddy-ramani 在他的回答中所说的是正确的,但他是在 xib 文件中做的,但是以编程方式你可以像下面那样做,

只需添加这段代码

编辑要求更新按钮

CMFViewController.h 文件中创建两个按钮属性用下面的代码替换

 #import <UIKit/UIKit.h>

@interface CMFViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout>
@property (nonatomic, strong) UIButton *nextButton;
@property (nonatomic, strong) UIButton *prevButton;
@end

CMFViewController.m 文件中

 - (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

[self loadImages];
[self setupCollectionView];
[self addNextAndPreviousButtons];//add a method to add previous and next buttons
}

//hear u are adding previous and next images, but i didn't added the constraints u add it if u want t work in both orientation
- (void)addNextAndPreviousButtons
{
_nextButton = [UIButton buttonWithType:UIButtonTypeSystem];
_nextButton.frame =CGRectMake(self.view.bounds.size.width - 40, self.view.bounds.size.height/2, 50, 30);
[_nextButton setTitle:@"Next" forState:UIControlStateNormal];
[_nextButton addTarget:self action:@selector(nextButtonAction:) forControlEvents:UIControlEventTouchUpInside];

_prevButton = [UIButton buttonWithType:UIButtonTypeSystem];
_prevButton.frame = CGRectMake(self.view.bounds.origin.x, self.view.bounds.size.height/2, 50, 30);
[_prevButton setTitle:@"Prev" forState:UIControlStateNormal];
[_prevButton addTarget:self action:@selector(previousButtonAction:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:_nextButton];
[self.view addSubview:_prevButton];

}

//previous button action
- (void)previousButtonAction:(id)sender
{
NSArray *visibleCell = [_collectionView visibleCells];
if(visibleCell)
{
NSIndexPath *path = [_collectionView indexPathForCell:[visibleCell lastObject]];
if(!path.row == 0)
{
NSIndexPath *nextPath = [NSIndexPath indexPathForItem:(path.row - 1) inSection:0];
[_collectionView scrollToItemAtIndexPath:nextPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
}
}
}

//next button action
- (void)nextButtonAction:(id)sender
{
NSArray *visibleCell = [_collectionView visibleCells];
if(visibleCell)
{
NSIndexPath *path = [_collectionView indexPathForCell:[visibleCell lastObject]];
if(path.row < [_dataArray count] - 1)
{
NSIndexPath *nextPath = [NSIndexPath indexPathForItem:(path.row + 1) inSection:0];
[_collectionView scrollToItemAtIndexPath:nextPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
}
}
}

//edited the method addNextAndPreviousButtons please replace it by this edited answer
//for all cases even when u are swiping
//this is to handle buttons either by tapping or navigation through swiping the collection view
- (void)updateButtons:(NSInteger)row
{
//at the beginning
if(row == 0)
{
_prevButton.hidden = YES;
_nextButton.hidden = NO;
return;
}
else if(row == ([_dataArray count] -1))
{
_nextButton.hidden = YES;
_prevButton.hidden = NO;
}
else
{
_nextButton.hidden = NO;
_prevButton.hidden = NO;
}
}

//finally u have to call updateButtons method this method
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
CMFGalleryCell *cell = (CMFGalleryCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];

NSString *imageName = [self.dataArray objectAtIndex:indexPath.row];
[cell setImageName:imageName];
[cell updateCell];
[self updateButtons:indexPath.row]; //update the buttons
return cell;

}

关于ios - 以编程方式将 UIButtons 添加到 UICollectionView 单元格的 uiimage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26879608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com