需求:
需要的Button 的个数不一定 Button上显示的字符串的长度不一定,Button上显示的字符串和Button的个数全部从服务器下发 ,当Button的个数在屏幕上展示不下的时候要可以左右滑动 以展示更多的Button
方案:
综合以上因素 我选择利用CollectionView实现此功能.
其中遇到几个问题:
首先说明: cell中有一个Label 属性
- (
UILabel
*)textLabel{
if (! _textLabel ) {
_textLabel = [[ UILabel alloc ] initWithFrame : self . contentView . frame ];
_textLabel . layer . borderWidth = 1 ;
_textLabel . layer . borderColor = [ UIColor lightGrayColor ]. CGColor ;
_textLabel . font = [ UIFont systemFontOfSize : 13 ];
_textLabel . textAlignment = NSTextAlignmentCenter ;
_textLabel . textColor = [ UIColor blackColor ];
[ self . contentView addSubview : _textLabel ];
if (! _textLabel ) {
_textLabel = [[ UILabel alloc ] initWithFrame : self . contentView . frame ];
_textLabel . layer . borderWidth = 1 ;
_textLabel . layer . borderColor = [ UIColor lightGrayColor ]. CGColor ;
_textLabel . font = [ UIFont systemFontOfSize : 13 ];
_textLabel . textAlignment = NSTextAlignmentCenter ;
_textLabel . textColor = [ UIColor blackColor ];
[ self . contentView addSubview : _textLabel ];
}
_textLabel
.
frame
=
CGRectMake
(
CGRectGetMinX
(
self
.
contentView
.
frame
),
CGRectGetMinY
(
self
.
contentView
.
frame
),
self
.
frame
.
size
.
width
,
self
.
frame
.
size
.
height
);
return
_textLabel
;
}
问题 一 :因为选中cell时 cell的字和边框要变成红色 ,当再点击其他Item时此item要变为原来的样子
这个功能主要在collectionView的两个代理方法中实现
- (
void
)collectionView:(
UICollectionView
*)collectionView didSelectItemAtIndexPath:(
NSIndexPath
*)indexPath;
- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath;;
具体实现如下:
/**
* 当点击 item 时会调用此方法 在此方法中把点击的 item 的 textLabel 属性的字体颜色和边框改变颜色
*
*/
- (void)collectionView:(UICollectionView
*)collectionView didSelectItemAtIndexPath:(
NSIndexPath
*)indexPath{