iOS开发实战——CollectionView点击事件与键盘隐藏结合案例

本文介绍了在iOS开发中,如何处理CollectionView的点击事件,同时解决键盘遮挡问题。通过自定义Cell和手势识别,实现了点击背景、Cell及Cell内按钮时键盘的隐藏,并确保点击事件的正确触发。案例代码已上传至GitHub供参考。
摘要由CSDN通过智能技术生成

       在我们的实际开发中,CollectionView是一种非常实用而又稍难的控件,如果想要在复杂的场景下使用,则需要考虑的比较全面。如果又在CollectionView添加其他的控件,比如在cell里面再添加一个按钮,那么点击触发的事件前后顺序就非常重要了。再者,如果一个界面中包含了一个输入控件,需要弹出键盘时,键盘遮挡对于界面上的其他控件的使用就会造成较大的影响。今天我的案例具体需求描述下:界面中有一个TextField,点击输入的时候弹出键盘,并且整个界面向上移动,让键盘不遮挡其他控件。并且在点击界面背景、CollectionView空白部分,cell,和cell上面的按钮的时候可以收回键盘。并且在点击cell的时候可以触发didSelected方法,点击cell上面的按钮触发另一个点击方法。案例代码已经上传至  https://github.com/chenyufeng1991/ShowHiddenKeyboard 。欢迎大家下载使用。如果想对CollectionView有更为复杂的用法,可以移步这里  https://github.com/chenyufeng1991/CollectionView 。还有就是项目中使用Masonry来进行自动布局,Masonry的使用可以参考这篇博客《Autolayout第三方库Masonry的入门与实践》  。

(1)首先在AppDelegate.h中定义一些全局变量

//定义宏,用于block
#define WeakSelf(weakSelf) __weak __typeof(&*self)weakSelf = self;

typedef NS_ENUM(NSInteger,KeyBoardState){

    KeyboardHidden = 0,
    KeyboardShowing
};
定义WeakSelf宏定义是因为在使用Masonry的时候会大量用到block,为了防止引起循环引用,需要使用__weak修饰self.  

下面的枚举是键盘的两种状态,显示或者隐藏。

(2)我要实现的UI效果图如下:


其中黄色部分是一个ImageView,背景设置了黄色。绿色部分是一个TextField。下面带图片的黑色部分是一个CollectionView,那张图片就是一个cell。我使用Masonry来
实现下面的UI。

先声明下属性:

@property (nonatomic, strong) UIView *contentView;
@property (nonatomic, strong) UIImageView *topImageView;
@property (nonatomic, strong) UITextField *inputField;
@property (nonatomic, strong) UICollectionView *collectionView;
@property (nonatomic, strong) NSMutableArray *collArr;

@property (nonatomic, assign) KeyBoardState status;

布局:

// 包容整个界面的容器View

    CGRect tureFame = self.view.frame;
    tureFame.origin.y = 64;// 获取剔除导航栏后的真正y位置

    self.contentView = [[UIView alloc] init];
    self.contentView.backgroundColor = [UIColor whiteColor];
    self.contentView.frame = tureFame;
    self.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [self.view addSubview:self.contentView];

    // 顶部图片
    WeakSelf(weakSelf);
    self.topImageView = [[UIImageView alloc] 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值