自定义控件
1.IBAction和IBOutlet共同的和区别2.常见错误3.UIButton4.UILabel5.父子控件6.UIView常见属性7.渐变动画8.懒加载9.通过Xib自定义控件
10.自定义控件
11.@property的使用策略12.instancetype和id的区别13.帧动画14.UIImageView15.MemoryLayout16.偏swift框架17.git的使用18.寄存器19.swift基础20.枚举21.UITableView22.UITableViewCell23.UITableView24.UIScrollView遇见的问题25.NSTimer26.常见控件的事件监听27.UIScrollView28.图片拉伸29.KVO30.KVC31.Xcode15.0.1 有相同的.h文件,Xcode的调用顺序步骤
- 新建一个继承UIView的类
- 重写init方法,在init方法中添加子控件
- 在layoutSubviews方法中设置子控件的frame(layoutSubviewsy一定要调用super )
- 提供一个模型属性,重写模型属性的set方法(在set方法中取出模型属性,给对应的子控件赋值)
//来自文件自定义控件
#import "XMGShopView.h" #import "XMGShopModel.h" @interface XMGShopView () @property (nonatomic ,weak)UIImageView *iconImageView; @property (nonatomic ,weak)UILabel *nameLabel; @end @implementation XMGShopView // 添加子控件 // 控件的init方法内部会自动调用initWithFrame: - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { // 添加图片 UIImageView *iconImageView = [[UIImageView alloc] init]; [self addSubview:iconImageView]; self.iconImageView = iconImageView; // 添加文字 UILabel *nameLabel = [[UILabel alloc] init]; nameLabel.textAlignment = NSTextAlignmentCenter; [self addSubview:nameLabel]; self.nameLabel = nameLabel; } return self; } - (instancetype)initWithShop:(XMGShopModel *)shop { if (self = [super init]) { self.shop = shop; } return self; } + (instancetype)shopViewWithShop:(XMGShopModel *)shop { XMGShopView *shopView = [[self alloc] initWithShop:shop]; return shopView; } // 布局子控件,设置子控件的位置和尺寸 - (void)layoutSubviews { // 注意点:这里一定要写 [super layoutSubviews]; CGFloat shopW = self.frame.size.width; CGFloat shopH = self.frame.size.height; self.iconImageView.frame = CGRectMake(0, 0, shopW, shopW); self.nameLabel.frame = CGRectMake(0, shopW, shopW, shopH - shopW); } // 设置子控件显示的数据 - (void)setShop:(XMGShopModel *)shop { _shop = shop; self.iconImageView.image = [UIImage imageNamed:shop.icon]; self.nameLabel.text = shop.name; } #pragma mark - 第二种设置数据的方法实现 - (void)setIcon:(NSString *)icon { self.iconImageView.image = [UIImage imageNamed:icon]; } - (void)setName:(NSString *)name { self.nameLabel.text = name; } - (void)setIcon:(NSString *)icon name:(NSString *)name; { self.iconImageView.image = [UIImage imageNamed:icon]; self.nameLabel.text = name; } @end
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· 开发者新选择:用DeepSeek实现Cursor级智能编程的免费方案
· 【译】.NET 升级助手现在支持升级到集中式包管理
· 独立开发经验谈:如何通过 Docker 让潜在客户快速体验你的系统
· 并发编程 - 线程同步(二)