之前剛開端弄IOS的時刻年夜部門都是經由過程盤算frame來結構視圖,弄著弄著貌似都是用主動結構來弄定了,由於主動結構其實太便利、太好用了,所以當我昨天忽然回看之前代碼的時刻忽然看到了之前寫的九宮格結構,感到許多器械都忘了,所以明天特地在這裡記載一下,而且經由過程幾個簡略的宏界說來完成結構的需求,詳細年夜家看代碼吧,都有正文 很好懂:
// // ButtonContainerView.h // chemuchao // // Created by 碰見遠洋 on 16/3/7. // Copyright © 2016年 zhaoxiaolu. All rights reserved. // #import <UIKit/UIKit.h> //按鈕點擊block typedef void(^spitlotBtnClick)(UIButton * btn); @interface ButtonContainerView : UIView @property (nonatomic,copy)spitlotBtnClick spitlotBlock;/**<<#展現對話內容的tableview#>*/ @end
這裡給年夜家推舉一個寫正文的好辦法吧,在聲明屬性的時刻,我們假如想在其余處所挪用這個屬性的時刻鄙人方有提醒 如圖:

只須要跟我在下面聲明屬性的時刻一樣 在最初加上
/**<這是要寫的提醒文字*/
應用這類方法聲明的屬性,在裡面挪用的時刻就會有提醒,似乎跑題了,接上去點M的代碼吧:
//
// ButtonContainerView.m
// chemuchao
//
// Created by 碰見遠洋 on 16/3/7.
// Copyright © 2016年 zhaoxiaolu. All rights reserved.
//
#import "ButtonContainerView.h"
#import "UIView+Extension.h"
//狀況欄高度
#define kStateHeight 20
//總行數
#define kRows 2
//總列數
#define kCols 4
//九宮格個數
#define kCount 8
//九宮格之間的間隙
#define kMargin 5
//字體年夜小
#define kFont15 [UIFont systemFontOfSize:15]
@interface ButtonContainerView ()
@property (nonatomic,strong)NSMutableArray * btns;
@property (nonatomic,strong)NSArray * btnTitles;
@end
@implementation ButtonContainerView
- (NSMutableArray *)btns
{
if (!_btns) {
_btns = [NSMutableArray array];
}
return _btns;
}
-(NSArray *)btnTitles {
if (!_btnTitles) {
_btnTitles = @[@"堵成狗",@"堵成翔",@"路太窄",@"沒燈",@"路不屈",@"積水多",@"波動",@"路太髒"];
}
return _btnTitles;
}
- (instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
[self setupUI];
}
return self;
}
- (void)setupUI {
for (int i = 0; i < kCount; i++) {
UIButton * btn = [[UIButton alloc]init];
[btn setTitle:self.btnTitles[i] forState:UIControlStateNormal];
[self addSubview:btn];
btn.layer.borderWidth = 1;
btn.layer.borderColor = [UIColor redColor].CGColor;
btn.titleLabel.font = [UIFont systemFontOfSize:13];
[btn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(spitlotBtnClick:) forControlEvents:UIControlEventTouchUpInside];
[self.btns addObject:btn];
}
}
-(void)layoutSubviews {
[super layoutSubviews];
[self.btns enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
UIButton * btn = obj;
btn.tag = idx;
//行號
NSUInteger row = idx/kCols;
//列號
NSUInteger col = idx%kCols;
CGFloat btnW = (self.width - kMargin*(kCols + 1))/kCols;
CGFloat btnH = (self.height - kMargin*(kRows + 1))/kRows -10;
CGFloat btnX = kMargin + col*(kMargin + btnW);
CGFloat btnY = kMargin + row*(kMargin + btnH) + kStateHeight;
btn.frame = CGRectMake(btnX, btnY, btnW, btnH);
}];
}
#pragma mark 按鈕點擊事宜
- (void)spitlotBtnClick:(UIButton *)sender {
NSAssert(self.spitlotBlock != nil, @"傳入的block不克不及為空");
//履行block
self.spitlotBlock(sender);
}
@end
你只須要改換幾個宏界說便可以定制你的九宮格結構了,例如總行數、總列數、九宮格個數,簡略吧 復用性照樣很高的,固然關於應用主動結構的你來講,可以疏忽我。
願望經由過程此文能贊助年夜家開辟 IOS九宮格的開辟,感謝年夜家對本站的支撐!
【IOS 九宮格結構完成辦法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!