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

news2024/9/20 10:54:06

效果如下,就是在一个空白页面动态添加控件,给按钮添加事件,图片名字和标题放入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,h
        NSDictionary *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才能找到,否则返回nil
        UIImage *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,h
        uiLabel.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.coloradmin.cn/o/2098058.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

再次拿下品牌全球代言人,王鹤棣商业价值再度证明!

9月2日&#xff0c;FENTY BEAUTY品牌正式官宣王鹤棣为全球代言人&#xff0c;这也是该品牌创立至今官宣的中国首位全球代言人。 FENTY BEAUTY是由美国歌手Rihanna创立于2017年的高端美妆品牌&#xff0c;也是LV母公司LVMH集团联手RIHANNA一同孵化的品牌&#xff0c;因其产品具有…

【精选】基于HTML5技术应用于智能宠物寻找与领养系统的设计与实现(全网独一无二,阿龙独创)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

2020年ICPC南京站 补题记录

文章目录 A - Ah, Its Yesterday Once More&#xff08;构造&#xff09;E - Evil Coordinate&#xff08;构造&#xff09;F - Fireworks&#xff08;概率三分&#xff09;H - Harmonious Rectangle&#xff08;打表&#xff09;K - K Co-prime Permutation&#xff08;签到&a…

Git如何安装和配置

一、Git 的安装 1、Git 的官网 Git (git-scm.com) 2、下载 Git for Windows 在官网下载好 Git 的安装文件后&#xff0c;接下来就可以进行安装了。 3、安装 Git 以管理员身份运行你下载的安装文件&#xff1a; 然后就可以进入安装向导了。 4、验证是否安装成功 当安装向…

数据资产入表和数据治理的联系和区别是什么?

引言&#xff1a;数据资产入表是指将企业的数据资源以资产的形式纳入财务报表中进行管理和计量。随着信息技术的飞速发展&#xff0c;数据已成为企业的重要资产之一。数据资产能够为企业带来直接或间接的经济利益&#xff0c;如通过数据分析优化业务流程、提升客户满意度、增加…

微信小程序安卓14蓝牙连接需要打开微信附近设备权限提醒

1.wx.onBluetoothDeviceFound去搜索附近的设备如果搜索不到一个设备则默认附近设备权限没打开&#xff08;ps微信开放社区里面的 wx.getAppAuthorizeSetting接口里面的bluetoothAuthorized一样会返回“authorized”判断不了只要允许授权蓝牙&#xff0c;附近设备权限没授权依然…

class 4: vue.js 3监听器 watch

某些情况下需要监听某个响应式数据的变化&#xff0c;这时就需要使用监听器(watch)来实现了 watch的使用语法如下 选项&#xff1a;watch类型&#xff1a;{ [key: string]: string | Function | Object | Array}详解&#xff1a;watch属性是一个对象&#xff0c;该对象的键(k…

Unity (编辑器)数据持久化 之 ScriptableObject初识与创建

1.什么是ScriptableObject ScriptableObject - Unity 手册 如题&#xff0c;一个可以在Unity编辑器中方便编辑数据的工具 一个脚本继承该类&#xff0c;并且序列化或者有公共变量&#xff0c;即可在Inspector窗口看到它们 其特点&#xff1a; Q:是否可以将 ScriptableObject…

Nodejs的详细安装过程与步骤

目录 一、下载node.js 二、安装程序 三、检查是否安装成功 四、新建文件夹 五、配置环境变量 一、下载node.js 下载地址&#xff1a;Node.js — Run JavaScript Everywhere 选择想要下载的版本&#xff0c;点击Download Node.js 二、安装程序 &#xff08;1&#xff0…

食家巷桃酥,一口酥脆,满是幸福

在美食的世界里&#xff0c;总有一些味道能瞬间勾起我们的回忆&#xff0c;食家巷桃酥便是其中之一。初见食家巷桃酥&#xff0c;那金黄的色泽便让人眼前一亮。每一块桃酥都像是一件小小的艺术品&#xff0c;边缘微微隆起&#xff0c;中间微微凹陷&#xff0c;散发着诱人的香气…

文产数字化,古迹存久远——福永街道凤凰古村RV数字全景在线游览平台上线

深圳宝安区宣传文化体育发展专项资金资助、福永街道党建服务中心指导的“凤凰古村文物抢救性挖掘与传承现实虚拟&#xff08;RV&#xff09;数字化工程”项目自从2024年6月份正式启动以来&#xff0c;经紧锣密鼓地调研、采集和制作&#xff0c;目前&#xff0c;该项目已正式完工…

【HarmonyOS 4.0】应用级变量的状态管理

组件级变量的状态管理装饰器仅能在页面内&#xff0c;即一个组件树上共享状态变量。 如果开发者要实现应用级的&#xff0c;或者多个页面的状态数据共享&#xff0c;就需要用到应用级变量的状态管理。 1. LocalStorage&#xff08;LocalStorageProp/LocalStorageLink&#xff0…

软考有哪些科目一年考两次?

软考高级【系统分析师】及【系统架构设计师】是一年考两次的。 软考中级【软件设计师】和【网络工程师】也是一年考两次的。 其他科目一年都只开考一次&#xff0c;或者上半年开考&#xff0c;或者下半年开考&#xff0c;具体考试时间可看下图。 软考考题类型/数量/考试方式&…

西安运营服务体系完善的产业园在哪里?

在西安这片充满历史底蕴与创新活力的土地上&#xff0c;有一处运营服务体系完善的产业园正熠熠生辉&#xff0c;成为众多企业追逐梦想、实现发展的理想之地。 这个产业园坐落在 [西安市长安区东长安街481号]的西安国际数字影像产业园&#xff0c;园区正以其卓越的运营服务体系吸…

为什么音视频SDK成为线上招投标不可或缺的技术支持?

随着信息技术的飞速发展和数字化转型的深入&#xff0c;线上招投标已成为现代商业活动中不可或缺的部分。这一过程不仅提高了招投标的效率&#xff0c;还增强了透明度和公平性。在这个过程中&#xff0c;音视频SDK&#xff08;软件开发工具包&#xff09;作为关键技术之一&…

nvm管理node版本解决node版本冲突问题

nvm管理node版本解决node版本冲突等乱七八糟的问题 说明一、node环境检查二、安装nvm三、node安装说明 本文主要内容为nvm的安装,包括node环境的检查,nvm下载安装以及不同版本的node安装 更新时间:2024/09/01 16:39 本文仅为记录学习轨迹,如有侵权,联系删除 一、node环…

webros机器人控制软件

一、可显示轨迹。 二、可显示机器人状态&#xff0c;如速度、位置等。 三、可以对机器人进行多点导航设置并下发导航点。 技术栈&#xff1a;rosbrige_server ,vue3,ros1,robotwebtool

美畅物联丨智能安防新趋势:IPC规格参数详解与选型建议

在畅联AIoT开放云平台的应用生态中&#xff0c;"端-边-网-云-用"这一核心理念始终是我们构建视频及AIoT底座平台的基石。其中&#xff0c;网络摄像机&#xff08;IPC&#xff0c;即Internet Protocol Camera&#xff09;&#xff0c;作为端侧设备的核心成员&#xff…

2024-09-02 Ubuntu固定USB串口名(包括1拖N的USB串口)

在运行Ubuntu系统的开发板上,如果使用可插拔的USB串口,有时候程序正在运行时,如果突然连接传感器的USB串口设备被插拔了一下,这时,会发现系统中的USB串口名发生了改变。例如,插拔之前是/dev/ttyUSB0,插拔之后变成了/dev/ttyUSB3。发生这种情况的时候,有时候会导致程序无…

Harbor部署docker私人仓库

1、新建虚拟机rhel9 2、配置网络 #修改内核参数使网卡名称为ethxxx grubby --update-kernel ALL --args net.ifnames0reboot #配置网络 vim /etc/NetworkManager/system-connections/eth0.connection 内容为&#xff1a;[connection] ideth0 typeethernet interface-nameeth0…