[TwistedFate]自定义视图

大漠插件找图找字避坑手册:从ziku0.txt字库制作到易语言精准识别(附综合工具实操) 本文深入解析大漠插件在图像识别中的核心难点,提供从ziku0.txt字库精准制作到易语言高效调用的完整避坑指南。重点讲解如何利用大漠综合工具科学设置偏色与二值化参数,生成高质量色彩描述字符串,并分享识别失败的系统排查方法与进阶优化策略,旨在实现99%的稳定识别率。 阅读详情

LTView

自定义视图的步骤

  1. 创建一个继承自UIView的类
  2. 重写新类的初始化方法
  3. 把想封装的视图添加封装到 新类里面(初始化到新类中)
  4. 为了方便外部进行赋值取值 把添加的视图写成属性(别忘了释放内存)
  5. 测试一下

自定义视图的好处

提高工作效率 大大提高代码的复用性

具体实现

自定义Label-TextField视图

创建LTView类继承自LTView

// 将要创建的控件用属性写在.h文件中
@property (strong, nonatomic) UILabel *label;
@property (strong, nonatomic) UITextField *textField;

// 在.m文件中重写初始化方法 在初始化LTView的同时添加控件
- (instancetype)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self) {
        // 获取动态高度
        CGFloat height = frame.size.height;
        // 获取动态宽度
        CGFloat width = frame.size.width;

        // 根据上面的宽度 来添加label
        self.label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, width / 3, height)];
        self.label.textAlignment = NSTextAlignmentCenter;
        self.label.backgroundColor = [UIColor blueColor];
        // 添加到自己身上
        [self addSubview:self.label];
        // 释放空间
        [_label release];

// 动态获取值构建frame可以适应任何尺寸的屏幕,并且当需求改变时,只需更改第一个控件,其余控件位置随之而改

        // 初始化一个TextField
        self.textField = [[UITextField alloc] initWithFrame:CGRectMake(width / 3 + 20, 0, width / 3 * 2 - 20, height)];
        // 设置背景色
        self.textField.backgroundColor = [UIColor greenColor];
        // 添加到视图上
        [self addSubview:self.textField];
        // 释放空间
        [_textField release];
    }
    return self;
}

创建登陆界面LoginView利用自定义视图进行构建

// 首先引入头文件LTView.h
// 在头文件中将需要的控件写成属性
@property (nonatomic, retain) LTView *userNameLTView;
@property (nonatomic, retain) LTView *passWordLTView;
@property (nonatomic, retain) UIButton *loginButton;
@property (nonatomic, retain) UIButton *registButton;
@property (nonatomic, retain) UIButton *findPasswordButton;

// 在.m文件中实现添加控件
- (instancetype)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self) {
    // 初始化输入账户名的l - T
        self.userNameLTView = [[LTView alloc] initWithFrame:CGRectMake((kScreenWidth - 300) / 2, 100, 300, 50)];
        self.userNameLTView.backgroundColor = [UIColor redColor];

        [self addSubview:self.userNameLTView];
        [self.userNameLTView release];
     // 初始化输入密码的l - T   
        self.passWordLTView = [[LTView alloc] initWithFrame:CGRectMake(self.userNameLTView.frame.origin.x, self.userNameLTView.frame.origin.y + self.userNameLTView.frame.size.height + kRowHeight, self.userNameLTView.frame.size.width, self.userNameLTView.frame.size.height)];
        self.passWordLTView.backgroundColor = [UIColor redColor];
        [self addSubview:self.passWordLTView];
        [self.passWordLTView release];

        // 循环button
        for (int i = 0; i < 3 ; i++) {
            UIButton *button = [UIButton buttonWithType:(UIButtonTypeCustom)];
            button.frame = CGRectMake(50 + i * 100,300 , 80, 50);
            button.backgroundColor = [UIColor cyanColor];

            // 添加标签 方便取出button 与属性的button相对应
            button.tag = i + 100;
            [self addSubview:button];
        }
        // 属性与循环创建的button进行关联
        self.loginButton = (UIButton *)[self viewWithTag:100];
        self.findPasswordButton = (UIButton *)[self viewWithTag:101];
        self.registButton = (UIButton *)[self viewWithTag:102];

将属性与循环创建的控件一一对应

// 除了利用tag值 还可以取出父视图上的子视图数组,利用下标进行一一对应
NSArray *array = self.subviews;
self.loginButton = array[2];
[self.loginButton setTitle:@"登陆" forState:(UIControlStateNormal)];

在window上初始化并显示

LoginView *login = [[LoginView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [login.loginButton setTitle:@"登陆" forState:(UIControlStateNormal)];
    [login.registButton setTitle:@"注册" forState:(UIControlStateNormal)];
    [login.findPasswordButton setTitle:@"找回密码" forState:(UIControlStateNormal)];
    [login.loginButton setTitleColor:[UIColor redColor] forState:(UIControlStateNormal)];
    [login.registButton setTitleColor:[UIColor redColor] forState:(UIControlStateNormal)];
    [login.findPasswordButton setTitleColor:[UIColor redColor] forState:(UIControlStateNormal)];
    [self.window addSubview:login];
    [login release];

重写controller的loadView⽅法

创建⾃定义视图对象,并指定为controller的view

 LoginView *logview = [[LoginView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    logview.tag = 1000;
    // 帮系统给self.view赋值
    self.view = logview;
    [logview release];
ElementUI时间选择器(el-date-picker)输入格式的智能转换与动态适配 本文深入探讨了ElementUI时间选择器(el-date-picker)在处理用户自由格式输入时的痛点,并提出了基于Vue自定义指令的智能转换解决方案。该方案通过核心解析函数自动识别如“20231225”等连续数字输入,将其动态转换为标准时间格式,并确保与表单验证兼容,有效提升了后台管理系统的输入效率和用户体验。 阅读详情

相关推荐

Proteus仿真实战:基于IIC驱动SSD1306的0.96英寸OLED显示方案解析

本文详细解析了在Proteus仿真环境中基于IIC驱动SSD1306的0.96英寸OLED显示方案。从硬件搭建、IIC接口连接、软件驱动移植到常见问题排查,提供了全面的实战指导,帮助开发者快速实现OLED显示功能并优化性能。

weixin_28724661的博客 773

[TwistedFate]MVC视图控制器

MVC 基本介绍 UIViewController是MVC设计模式的核⼼。 MVC是⼀个框架级的设计模式。 M是Model,主要⽤于建⽴数据模型(即数据的结构) V是View,我们能看到的所有控件都是view,view主要的功能是展⽰数据。 C是控制器,主要是控制M和V的通信 一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互

Do not just be a pragrammer 479

注册“Oracle Provider for OLE DB”和创建链接服务器

注册“Oracle Provider for OLE DB”和创建链接服务器 在sql server 数据库上创建链接服务器,连接oracle数据库,访问接口需要设置为:“Oracle Provider for OLE DB”。 如果电脑上没有这个驱动,安装一个完整的Oracle11gR2程序是一个有效的方法,但这个64位版本的安装包有2个多G, 相当庞大,如果仅仅...

weixin_30760895的博客 2385

[TwistedFate]容器视图控制器 视图生命周期

容器视图控制器如果不想替换控制器的自带视图self.view 就在viewDidLoad方法中书写添加SecondViewController作为根视图控制器的子控制器// 添加子控制器 self.secondVC = [[SecondViewController alloc] init]; // 把secondVC添加成子控制器 让rootVC去管理 // secondVC

Do not just be a pragrammer 439

L298N电机驱动模块的接线使用与代码实现

#include "iostm8s208mb.h" #define u8 uint8_t #define u16 uint16_t #define u32 uint32_t typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t; // 关于LED灯的宏定义 #define LED2 PI_ODR_ODR2 //输出量 #define LE

Clichong 13万+

ST-LINK调试STM32H743必看:CubeMX工程中缺失的这行代码导致程序跑飞

本文深入剖析了使用ST-LINK调试STM32H743时,因CubeMX工程中缺失电源电压档位配置代码而导致程序跑飞或出现“Can not access memory”错误的问题。文章解释了H7系列电源与时钟耦合的核心原理,提供了具体的代码修复方案和系统化的调试排查思路,帮助开发者从根本上解决这一常见调试困境。

weixin_29191669的博客 281

[TwistedFate]UITableViewCell自定义-01

自定义cell步骤: 创建TableViewCell的子类 重写初始化方法 要添加的控件添加到到cell的现实内容区域contentView上面 把系统的cell 替换成自定义cell 完成 创建MyTableViewCell类// 自定义初始化 - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(

Do not just be a pragrammer 487

orangepi 5 plus ubuntu24.04上安装redroid

OrangePi 5 Plus运行reDroid云手机方案总结 在RK3588+Ubuntu 24.04上部署reDroid(Android容器化方案)的关键步骤: 内核要求:确保启用binderfs(无需ashmem,新版reDroid使用memfd替代); 安装流程: 安装Docker并配置代理加速镜像拉取; 拉取reDroid镜像(推荐Android 12/13 ARM64版本); 通过挂载binderfs启动容器,指定分辨率与DPI参数; 多实例管理: 脚本化创建多个容器(如8个实例),分配独立端口

babytiger的专栏 2294

[TwistedFate]UITableView表视图

表示图TableView表视图UITableView,iOS中最重要的视图,随处可⻅见。表视图通常⽤用来管理⼀一组具有相同数据结构的数据. 步骤与之前一样,先创建根视图,因为tableView的实现方法比较多,可以创建一个addTableView方法,然后在视图控制器的viewDidLoad中调用.初始化以及代理设置- (void)addTableView{ // 初始化 UITableVie

Do not just be a pragrammer 523

Field _II 仿真 学习笔记

参考Field II的使用说明,进行了四个例子的练习。仿真程序和结果如下: PURPOSE1:Calculate the received response from all elements of a linear array and plot the responses and the summed response 【计算来自所有线性阵元的接收响应,并绘制该响应以及叠加响应。】 >>

qq_34018578的博客 1万+

基于VLFM的中文指令视觉语言导航系统设计与实现

文章摘要 本文介绍了一个基于VLFM(视觉语言边界地图)的中文指令视觉语言导航系统设计与实现。该系统采用模块化架构,包含三维场景渲染、URDF机器人仿真、VLFM导航引擎、中文指令解析和PyQt图形界面五大核心模块。系统支持自定义GLB场景模型和URDF机器人模型,通过transformers和langchain实现中文自然语言指令解析,利用VLFM算法进行语义导航决策。技术实现上详细介绍了GLB模型加载器开发、URDF机器人控制、VLFM导航算法集成以及PyQt界面设计。该系统在Ubuntu环境下运行,依

AI的内部世界的博客 209

[TwistedFate]导航视图控制器

导航视图控制器UINavigationController导航控制器,是iOS中最常⽤的多视图控制器之⼀,它⽤来管理多个视图控制器。 导航控制器可以认为是管理控制器的控制器,主要管理有层级关系的控制器 UINavigationController通过栈的⽅式管理控制器的切换,控制⼊栈和出栈来展⽰各个视图控制器 UINavigationController的ContentView⾥始终显⽰栈顶控

Do not just be a pragrammer 562

Lammps实现随机粗糙度表面沸腾

Lammps实现随机粗糙度表面沸腾前言 前言

Rockyoung 2703

[TwistedFate]TabBarController

TabBarController创建控制器 创建导航控制器// 创建控制器 FirstViewController *firstVC = [[FirstViewController alloc] init];// 创建导航控制器 UINavigationController *firstNaVC = [[UINavigationController alloc] initWithRootView

Do not just be a pragrammer 429

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

[TwistedFate]UIView UILabel

MRC下属性的属性MRC retain assign ARC retain相当于strong 一般修饰对象 assign相当于weak 一般修饰基本数据类型window初始化// 打印满屏的bounds self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]autorelea

Do not just be a pragrammer 575

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

[TwistedFate]UISegmentedControl

1

Do not just be a pragrammer 633

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[TwistedFate]UITableView表视图编辑,移动

UITableView编辑数据准备// 初始化数据 - (void)initializeData{ NSArray *array = @[@"0", @"1", @"2", @"3", @"添加"]; NSArray *array2 = @[@"0", @"1", @"2", @"3", @"4", @"添加"]; self.firstArray = [NSMutableAr

Do not just be a pragrammer 541

[TwistedFate]手势识别器

手势识别器抽象类:这个类是抽象类 其具体功能 交给子类去实现 (省代码) ⼿势识别器是对触摸事件做了封装,我们⽆需⾃⼰去判断某个⼿势 是否触发,⼿势识别器本⾝起到了识别作⽤,我们把重⼼放在识别之 后要做什么操作上⾯ 根视图准备满屏的ImageView// 创建imageView 添加手势用 UIImageView *imageV = [[UIImageView alloc] init

Do not just be a pragrammer 382

[TwistedFate]图片异步加载,KVO

异步下载图片自定义类imageDownLoader类思路: - 异步下载图片首先需要一个网址字符串 (需要传入一个字符串) - 加载完图片数据需要将一个data传给controller显示(代理传值) - 考虑到异步加载可能成功,也可能失败 代码实现: - 定义协议// 创建一个协议 @protocol ImageDownLoadDelegate <NSObject>// 请求成功 -

Do not just be a pragrammer 447

[TwistedFate]UITextField

UITextField初始化UITextField *textFiled = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 200, 50)]; textFiled.backgroundColor = [UIColor whiteColor]; textFiled.text = @"曹青衣";对齐方式// 中央对称 textFiled

Do not just be a pragrammer 438

[TwistedFate]UICollectionView

集合视图UICollectionViewLayout抽象类,具体功能由他的子类实现, 网状结构的布局创建一个网状的结构布局,设置具体的属性UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; // 最小行间距 layout.minimumLineSpacing = 20; //

Do not just be a pragrammer 478

[TwistedFate]UIScrollView UIPageControl

UIScrollView初始化及添加背景色UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:[UIScreen mainScreen].bounds]; scrollView.backgroundColor = [UIColor cyanColor];设置显示内容区域scrollView.contentSize = CGSi

Do not just be a pragrammer 398

[TwistedFate]触摸事件 晃动事件 target/action

触摸事件的方法创建TouchView类 并在根视图控制器里初始化 类里 添加触摸事件响应方法- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ NSLog(@"开始摸"); // UITouch保存手指的信息 例如触摸的点 // UITouch *touch = [touches anyObjec

Do not just be a pragrammer 601

[TwistedFate]Label自适应高度

Label的自适应高度创建一个labelUILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 300, 100)]; label.numberOfLines = 0; label.font = [UIFont systemFontOfSize:16]; label.backgroundColor = [UIColor

Do not just be a pragrammer 683

[TwistedFate]代理设计模式

使用协议代理的步骤 先创建协议 1.遵守协议 2.实现协议中的方法 3.设置代理(添加代理对象为实例变量) –(谁需要代理 在那个类里声明实例变量) 4.添加设置代理对象的方法(set方法) 5.让代理干活(让代理去调用协议中的方法) 6.从main创建对象 设置代理对象点击UIImageView换背景色创建协议@protocol UIButtonImageViewDelegate <

Do not just be a pragrammer 438

[TwistedFate]UIButton 应用启动流程

UIButton初始化UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];设置位置button.frame = CGRectMake(100, 100, 100, 100);设置颜色button.backgroundColor = [UIColor greenColor];设置标题// 三种状态 [button setTit

Do not just be a pragrammer 412
上一篇: [TwistedFate]UIButton 应用启动流程
下一篇: [TwistedFate]MVC视图控制器
zZZ浮生
博客等级 码龄11年 12粉丝 70原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值