将静态 UIButton 覆盖到 UICollectionView

Posted

技术标签:

【中文标题】将静态 UIButton 覆盖到 UICollectionView【英文标题】:Overlay a static UIButton onto a UICollectionView 【发布时间】:2015-02-13 08:42:32 【问题描述】:

我有一个UICollectionView,它有一个UICollectionViewCell 数组,每个单元格占据了 80% 的视图。 我想在每次按下时滚动到下一个单元格的屏幕上添加一个静态的UIButton,我必须将按钮subview 添加到父视图而不是UICollectionView 以使其成为静态。 我的问题是:如何将叠加层添加到主视图中,以及如何通过按下按钮以编程方式滚动视图? 我在哪里实现了我的收藏视图

@interface EvaluationViewController () <UICollectionViewDataSource,  UICollectionViewDelegate>
@property (weak, nonatomic) IBOutlet UIBarButtonItem *cancelButton;
@property (nonatomic, strong) DBManager* dbManager;

@end


@implementation EvaluationViewController

- (void)viewDidLoad

[super viewDidLoad];
self.dbManager = [[DBManager alloc] initWithDatabaseFilename:@"emokitDb.sqlite"];
NSLog(@"self.dbManager %@",self.dbManager.documentsDirectory);
[self loadProjectWithId:1];


 





   - (IBAction)cancelButton:(id)sender 
[self dismissViewControllerAnimated:YES completion:nil];


- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 
return 1;



-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
return 4;

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

Screen * screen = [self.project.screens objectAtIndex:indexPath.row];

static NSString * cellIdentifier = @"EvaluationCell";
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];


return cell;

-(void)loadProjectWithId:(int)projectId 

@end

【问题讨论】:

为按钮指定一个框架,将其添加到主视图中,当按钮被点击时,调整collectionView的contentOffset。 【参考方案1】:

这很容易:

您可以像这样添加按钮: 而且你必须给按钮一个目标来移动collectionView contentOffset...

- (void)viewDidLoad

  [super viewDidLoad];
  self.dbManager = [[DBManager alloc]         initWithDatabaseFilename:@"emokitDb.sqlite"];
 NSLog(@"self.dbManager %@",self.dbManager.documentsDirectory);
 [self loadProjectWithId:1];
 UIButton * button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(910, 400 , 100, 100);
button.backgroundColor =[UIColor blackColor];
[self.collectionView.superview addSubview:button];
[button addTarget:self action:@selector(changeContentOffset:) forControlEvents:UIControlEventTouchUpInside];

然后在选择器中你必须实现一个方法来改变 contentOffset

 - (IBAction)changeContentOffset:(id)sender 
        [self.collectionView setContentOffset:CGPointMake(nextCellXValue, 0) animated:YES]

【讨论】:

@LenvanZyl,您可以在将集合视图添加到主视图的任何位置添加这些方法。如果你用你的代码编辑你的帖子,我可以在里面写... @LenvanZyl 不,例如,您可以在控制器的 ViewDidLoad 中添加它...首先您必须为按钮提供一个框架(我将在我的答案中对其进行编辑...跨度> 现在唯一的问题是 UIButton * button = [[UIButton alloc]initWithFrame:CGRectMake:(10, 10, 9, 100)]; 给我一个错误。 UIButton 没有可见的@interface 声明选择器 initWithFrame

以上是关于将静态 UIButton 覆盖到 UICollectionView的主要内容,如果未能解决你的问题,请参考以下文章

如何将静态 UIButton 覆盖在 UITableView 上

如何覆盖 Xamarin.IOS UIButton 的 LayoutSublayersOfLayer 行为?

避免 UIPickerView ios 上的 UIButton 覆盖

在UIButton上覆盖'isSelected'或'isEnabled'不起作用

当从静态库触发时,UIButton Click 不起作用

为啥 UIButton 会覆盖 UITapGestureRecognizer?