ios动态创建控件及添加事件

效果如下,就是在一个空白页面动态添加控件,给按钮添加事件,图片名字和标题放入plist文件,plist是个Array,每一项是Dictionary。Dictionary里面方icon和name两个String的key。图片都放入Assets.xcassets。如果需要使用imageWithContentsOfFile方法(无缓存)加载图片,那么就需要新建Supporting Files个Group,将文件夹托进去,使用imageNamed方法(有缓存),那么只需将图片拖入Assets.xcassets文件夹即可。

给出代码:

//
//  AddViewController.m
//  study2024
//
//  Created by zhifei  zhu on 2024/8/31.
//#import "AddViewController.h"@interface AddViewController ()
@property (nonatomic,strong) NSArray *iconArray;
@end@implementation AddViewController
- (NSArray *)iconArray{if(_iconArray==nil){NSString *path=[[NSBundle mainBundle]pathForResource:@"icons.plist" ofType:nil];_iconArray=[NSArray arrayWithContentsOfFile:path];}return _iconArray;
}
- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view from its nib.NSUInteger count=self.iconArray.count;for(int a=0;a<count;a++){//添加外边框UIView *uiView=[UIView new];uiView.backgroundColor=[UIColor blueColor];CGFloat x=50+(a%3)*(75+10);CGFloat y=50+(a/3)*(100+10);uiView.frame=CGRectMake(x, y, 75, 100);//x,y,w,h//外边框内部添加图片UIImageView *uiImageView=[UIImageView new];uiImageView.backgroundColor=[UIColor greenColor];CGFloat iconW=45;CGFloat iconH=45;CGFloat x1=(uiView.frame.size.width-iconW)*0.5;//相对坐标CGFloat y1=0;//相对坐标uiImageView.frame=CGRectMake(x1, y1, iconW, iconH);//x,y,w,hNSDictionary *dictionary=self.iconArray[a];
//        NSString *imgPath = [NSString stringWithFormat:@"%@/%@.jpg", [[NSBundle mainBundle] resourcePath], dictionary[@"icon"]];NSString *imgPath=[[NSBundle mainBundle]pathForResource:dictionary[@"icon"] ofType:@"jpg"];//照片拖入Assets.xcassets文件夹会找不到资源,注意需要项目下新建group命名为Supporting Files,再项目外新建文件夹比如icons,然后将图片放入icons,再将icons文件夹拖入Supporting Files才能找到,否则返回nilUIImage *uiImage=[UIImage imageWithContentsOfFile:imgPath];//imageWithContentsOfFile不会缓存,每次都重新加载图片
//        UIImage *uiImage=[UIImage imageNamed:dictionary[@"icon"]];//imageNamed会缓存,照片拖入Assets.xcassets文件夹即可,图片非常多,会占用很多内存uiImageView.image=uiImage;[uiView addSubview:uiImageView];//外边框内部标题UILabel *uiLabel=[UILabel new];uiLabel.backgroundColor=[UIColor yellowColor];CGFloat labelW=uiView.frame.size.width;CGFloat labelH=20;CGFloat x2=0;//相对坐标CGFloat y2=uiImageView.frame.size.height+5;//相对坐标uiLabel.frame=CGRectMake(x2, y2, labelW, labelH);//x,y,w,huiLabel.text=dictionary[@"name"];[uiLabel setTextAlignment:NSTextAlignmentCenter];[uiView addSubview:uiLabel];//外边框内部添加按钮UIButton *uiButton=[UIButton new];uiButton.backgroundColor=[UIColor redColor];CGFloat buttonW=55;CGFloat buttonH=20;CGFloat x3=(75-55)*0.5;//相对坐标CGFloat y3=uiImageView.frame.size.height+uiLabel.frame.size.height+5+5;//相对坐标uiButton.frame=CGRectMake(x3, y3, buttonW, buttonH);//x,y,w,h[uiButton setTitle:@"下载" forState:UIControlStateNormal];[uiButton addTarget:self action:@selector(onclick:) forControlEvents:UIControlEventTouchUpInside];uiButton.tag=a;[uiView addSubview:uiButton];[self.view addSubview:uiView];}}
-(void)onclick:(UIButton *)uiButton{NSLog(@"%d点击下载",uiButton.tag);
}/*
#pragma mark - Navigation// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {// Get the new view controller using [segue destinationViewController].// Pass the selected object to the new view controller.
}
*/@end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/416727.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM 锁的种类

优质博文&#xff1a;IT-BLOG-CN 一、JVM 锁【偏向锁|轻量级锁|重量级锁】 对象头[每个对象都具有对象头] Mark&#xff1a;对象头的标记&#xff08;32位&#xff09;&#xff0c;描述对象的hash、锁信息、垃圾回收标记、年龄&#xff1b;内容包括&#xff1a;①、指向锁记录…

【MySQL】Ubuntu22.04安装MySQL8.0.39及修改默认用户名和密码

文章目录 安装mysql1. 下载mysql2. 查看mysql版本3. 启动mysql服务&#xff08;通常在安装后自动启动&#xff09;4. 运行安全配置脚本 修改用户名和密码1. 查看mysql自动设置的随机账号与密码2. 用默认账号密码登录mysql3. 找到账号密码有关的数据库4. 更改用户名和密码mysql5…

街机 CAPCOM CPS3 中英文名字与驱动对照表

Part.I 简介 本文列举了街机 CPS3 中游戏的中英文名字与其驱动的对照&#xff0c;以帮助诸位更快地找到自己想玩的游戏。 注意&#xff1a;汉化版的街机模拟器 Kawaks 中游戏的中文名字是根据英文直译的&#xff0c;并不是习惯性的中文叫法。比如『三国志』英文名为『Warriors…

【Selenium】UI自动化实践——输入验证码登录

文章目录 实战题目解题方案 实战题目 使用pythonselenium实现输入验证码的UI自动化。登录页面如图&#xff1a; 解题方案 验证码登录需要导入相关模块和库&#xff0c;本文使用的是opencv和ddddocr模块组合&#xff0c;导入方式采用pip3 install opencv-python、pip3 insta…

【论文阅读】CiteTracker: Correlating Image and Text for Visual Tracking

paper&#xff1a;NorahGreen/CiteTracker: [ICCV23] CiteTracker: Correlating Image and Text for Visual Tracking (github.com) code&#xff1a;NorahGreen/CiteTracker: [ICCV23] CiteTracker: Correlating Image and Text for Visual Tracking (github.com) 简介 现有…

Pr:媒体浏览器

Pr菜单&#xff1a;窗口/媒体浏览器 Window/Media Browser 快捷键&#xff1a;Shift 8 媒体浏览器 Media Browser是一个可以浏览、预览和导入不同类型媒体的面板。 在 Pr 中导入素材遇到问题时&#xff0c;可尝试使用媒体浏览器。 媒体浏览器是导入各类媒体的最佳选择&#xf…

C8T6超绝模块--LED

C8T6超绝模块–LED 大纲 怎样点亮LED结构体分析代码流程 具体案例 怎样点亮LED 首先不同的芯片的接法不一样&#xff0c;需要自己查看自己的芯片的原理图&#xff0c;我使用的是C8T6&#xff0c;使用的PC13接入的LED 注意看&#xff1a;怎么才能使LED灯亮呢&#xff1f; …

硬件工程师笔试面试——上拉电阻、下拉电阻

目录 1.3、上拉电阻 原理图 1.3.1、定义 1.3.2、作用 1.3.3、工作原理 1.3.4、选择上拉电阻的值 1.3.5、应用场景 1.3.6、与下拉电阻的区别 1.3.7、设计考虑 1.3.8电路设计中的注意事项 1.3.9、与ESD保护的结合 1.3.10、实际应用 1.3.11、上拉电阻在不同电压等级的…

【前端学习】AntV G6-07 深入图形与图形分组、自定义节点、节点动画(上、中)

课程链接 AntV G6&#xff1a;深入图形与图形分组、自定义节点、节点动画&#xff08;上&#xff09;_哔哩哔哩_bilibili AntV G6&#xff1a;深入图形与图形分组、自定义节点、节点动画&#xff08;中&#xff09;_哔哩哔哩_bilibili 图形分组 Group | G6 (antgroup.com) 自…

K8S 发布应用

前言 昨儿个用 unbuntu20.04 又装了一次K8S 用的 kubeadm containerd Cilium (CNI) 又重新撸了一遍 这里只记录 应用发布的笔记 正文 #创建deployment kubectl create deployment nginx --imagenginx #我这边大约30秒后显示为 ready kubectl get deployments kubectl desc…

MySQL - 基础 - 概述

基础 - 概述 一、相关概念 1、数据库&#xff08;DB&#xff09; 存储数据的仓库&#xff0c;数据是有组织的进行存储 2、数据库管理系统&#xff08;DBMS&#xff09; 操纵和管理数据库的大型软件 3、SQL 操作关系型数据库的编程语言&#xff0c;定义了一套操作关系型数据库…

【设计模式】工厂模式与策略模式的区别

目录 1、工厂模式 2、策略模式 3、区别 3.1、工厂模式 1. 目的&#xff1a; 2. 使用场景&#xff1a; 3. 实现方式&#xff1a; 4. 示例&#xff1a; 3.2、策略模式 1. 目的&#xff1a; 2. 使用场景&#xff1a; 3. 实现方式&#xff1a; 4. 示例&#xff1a; 工…

权威解读|2024固定网国内数据传送业务办理指南

一、固定网国内数据传送业务是什么&#xff1f; 固定网国内数据传送业务&#xff0c;是指互联网数据传送业务以外的&#xff0c;在固定网中以有线方式提供的国内端到端数据传送业务。主要包括基于IP承载网、ATM网、X.25分组交换网、DDN网、帧中继网络的数据传送业务等。 根据…

数据库管理-第238期 23ai:全球分布式数据库-架构与组件(20240904)

数据库管理238期 2024-09-04 数据库管理-第238期 23ai&#xff1a;全球分布式数据库-架构与组件&#xff08;20240904&#xff09;1 架构图2 分片数据库与分片3 Shard Catalog4 Shard Director5 Global Service6 管理界面总结 数据库管理-第238期 23ai&#xff1a;全球分布式数…

地理围栏,打造智能生活新边界

随着智能手机和其他移动设备的普及&#xff0c;用户对基于位置获取个性化服务的需求大幅增加&#xff0c;例如用户进入商圈范围并停留操作一段时间后&#xff0c;智能触发向用户推送该商圈吃、喝、玩、乐的优惠活动消息&#xff1b;又如当用户到达非常驻地的机场时触发围栏&…

工业网关在汽车智能工厂中的应用-天拓四方

工业网关是工业物联网&#xff08;IIoT&#xff09;的关键组成部分&#xff0c;它充当了工业现场设备与云端或企业级系统之间的桥梁。在智能工厂中&#xff0c;工业网关的应用至关重要&#xff0c;它确保了生产线的顺畅运行&#xff0c;并通过数据的透明化&#xff0c;提升了生…

《高等代数》范德蒙德行列式的应用

说明&#xff1a;此文章用于本人复习巩固&#xff0c;如果也能帮助到大家那就更加有意义了。 注&#xff1a;范德蒙德行列式的简单应用及其变形。 范德蒙德行列式的计算公式&#xff1a; 注&#xff1a;&#xff08;1&#xff09;用大下标减去小下标。 &#xff08;2&#xf…

QFile打开文件的两种方式

一、UI界面设置两个按键&#xff0c;并直接转到槽函数 二、两种代码展示 #include <QFile> #include <QDebug>//此两种方式中调用函数&#xff0c;应包含的头文件void Widget::on_btnReadFile01_clicked()//第一种打开方式 {//1. 打开文件QFile file;file.setFile…

密钥加密机的定义与功能

密钥加密机是信息安全领域中的核心设备&#xff0c;通过密码学原理&#xff0c;利用加密算法和密钥管理技术&#xff0c;对通信内容进行加密保护&#xff0c;确保数据在传输过程中的机密性、完整性和真实性。以下是对密钥加密机的详细阐述&#xff1a; 一、定义与功能 定义&…

集成电路学习:什么是OLED有机发光二极管

一、OLED&#xff1a;有机发光二极管 OLED&#xff0c;全称有机发光二极管&#xff08;Organic Light-Emitting Diode&#xff09;&#xff0c;是一种电流型的有机发光器件。以下是关于OLED的详细介绍&#xff1a; 二、OLED的定义与原理 OLED是基于有机半导体材料和发光材料在…