oc基本控件3

news2024/11/25 16:17:31

UIButton

//
//  ViewController.m
//  OcDemoTest
//
//  Created by Mac on 2023/7/14.
//

#import "ViewController.h"



@interface ViewController ()


@end

@implementation ViewController


- (void)viewDidLoad {
    [super viewDidLoad];
   // 1 创建按钮对象
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    
    // 2 设置frame
    button.frame = CGRectMake(100, 100, 170, 60);
    // 设置背景颜色
    button.backgroundColor = [UIColor redColor];
    // 设置文字
    //button.titleLabel.text = @"普通文字";
    [button setTitle:@"普通文字" forState:UIControlStateNormal];
    // 高亮按钮
    [button setTitle:@"高亮文字" forState:UIControlStateHighlighted];
    
    // 设置文字颜色
    [button setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
    
    [button setTitleColor:[UIColor yellowColor] forState:UIControlStateHighlighted];
    
    // 阴影颜色
//    [button setTitleShadowColor:[UIColor blackColor] forState:UIControlStateNormal];
//
//    [button setTitleShadowColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
    
    // 偏移量
    //button.titleLabel.shadowOffset = CGSizeMake(1, 2);
    
    // 设置内容图片
    [button setImage:[UIImage imageNamed:@"player_btn_pause_normal"] forState:UIControlStateNormal];
    [button setImage:[UIImage imageNamed:@"player_btn_pause_highlignt"] forState:UIControlStateHighlighted];
//
//    // 设置背景图片
    [button setBackgroundImage:[UIImage imageNamed:@"buttongreen"] forState:UIControlStateNormal];
    [button setBackgroundImage:[UIImage imageNamed:@"buttongreen_highlighed"] forState:UIControlStateHighlighted];
    
    // 禁用
    //button.enabled =NO;
    // 添加到控制器view中
    [self.view addSubview:button];
    
    // 监听方法
   
    [button addTarget:self action:@selector(demo) forControlEvents:UIControlEventTouchUpInside];
}

-(void)demo{
    NSLog(@"点击了按钮");
}


@end

//
//  ViewController.m
//  OcDemoTest
//
//  Created by Mac on 2023/7/14.
//

#import "ViewController.h"



@interface ViewController ()
// 购物车
@property (weak, nonatomic) IBOutlet UIView *shopCarView;
// 全局下标
@property (nonatomic,assign) NSInteger index;
// 添加按钮
@property (weak, nonatomic) IBOutlet UIButton *addButton;
// 删除按钮
@property (weak, nonatomic) IBOutlet UIButton *removeButton;

// 数据数组
@property (nonatomic,strong) NSArray *dataArr;


@end

@implementation ViewController

/**
  懒加载
 作用
 用到的时候再加载
 全局只会被加载一次
 全局都可以使用
 **/
-(NSArray *) dataArr {
    if(_dataArr == nil){
        self.dataArr = @[
            @{@"name":@"单肩包",@"icon":@"danjianbao"},
            @{@"name":@"钱包",@"icon":@"qianbao"},
            @{@"name":@"链条包",@"icon":@"liantiaobao"},
            @{@"name":@"手提包",@"icon":@"shoutibao"},
            @{@"name":@"双肩包",@"icon":@"shuangjianbao"},
            @{@"name":@"斜挎包",@"icon":@"xiekuabao"},
        
        ];
    }
    return _dataArr;
}


- (void)viewDidLoad {
    [super viewDidLoad];
    // 给下标赋值
    self.index = 0;
   
}
// 添加到购物车
- (IBAction)add:(UIButton *)sender {
    // 总列数
    NSInteger allCols = 3;
    // 商品的宽度
    CGFloat width = 80;
    CGFloat height = 100;
    // 求出水平间距 和垂直间距
    CGFloat hMargin = (self.shopCarView.frame.size.width - allCols *width)/(allCols -1);
    CGFloat vMargin = (self.shopCarView.frame.size.height - 2 * height)/1;
    NSInteger index = self.shopCarView.subviews.count;
    // 求出x值
    CGFloat x = (hMargin + width) * (index % allCols);
    CGFloat y = (vMargin + height) *(index/allCols);
    // 设置索引
    
    //创建商品view
    UIView *shopView = [[UIView alloc] init];
    // 设置frame
    shopView.frame = CGRectMake(x, y, 80, 100);
    // 设置背景颜色
    shopView.backgroundColor = [UIColor greenColor];
    // 添加到购物车
    [self.shopCarView addSubview:shopView];
    
    // 创建商品的UIImageView对象
    UIImageView *iconView = [[UIImageView alloc] init];
    iconView.frame = CGRectMake(0, 0, width, width);
    iconView.backgroundColor = [UIColor blueColor];
    [shopView addSubview:iconView];
    
    // 创建商品标题对象
    UILabel *titleLabel = [[UILabel alloc] init];
    titleLabel.frame = CGRectMake(0, width, width, height - width);
    titleLabel.backgroundColor = [UIColor yellowColor];
    titleLabel.textAlignment = NSTextAlignmentCenter; // 居中
    [shopView addSubview:titleLabel];
    
    // 设置数据(方式一)
//    iconView.image = [UIImage imageNamed:@"danjianbao"];
//    titleLabel.text = @"单肩包";
    // 方式二 (不可取,)
//    if(index == 0){
//        iconView.image = [UIImage imageNamed:@"danjianbao"];
//        titleLabel.text = @"单肩包";
//    }else if(index == 1){
//        iconView.image = [UIImage imageNamed:@"danjianbao"];
//        titleLabel.text = @"单肩包";
//    }else if(index == 1){
//        iconView.image = [UIImage imageNamed:@"danjianbao"];
//        titleLabel.text = @"单肩包";
//    }else if(index == 1){
//        iconView.image = [UIImage imageNamed:@"danjianbao"];
//        titleLabel.text = @"单肩包";
//    }
    
    // 方式三 数组
//    NSArray<NSString *> *imageNames = @[@"danjianbao",@"qianbao",@"liantiaobao",@"shoutibao",@"shuangjianbao",@"xiekuabao"];
//    NSArray<NSString *> *titleNames = @[@"单肩包",@"钱包",@"链条包",@"手提包",@"双肩包",@"斜挎包"];
//    iconView.image = [UIImage imageNamed:imageNames[index]];
//    titleLabel.text = titleNames[index];
    
    // 方式四 数组 字典
//    NSArray<NSDictionary *> *dataArr = @[
//        @{@"name":@"单肩包",@"icon":@"danjianbao"},
//        @{@"name":@"钱包",@"icon":@"qianbao"},
//        @{@"name":@"链条包",@"icon":@"liantiaobao"},
//        @{@"name":@"手提包",@"icon":@"shoutibao"},
//        @{@"name":@"双肩包",@"icon":@"shuangjianbao"},
//        @{@"name":@"斜挎包",@"icon":@"xiekuabao"},
//
//    ];
    
    // 设置数据
    NSDictionary *dict = self.dataArr[index];
    iconView.image = [UIImage imageNamed:dict[@"icon"]];
    titleLabel.text = dict[@"name"];
    
    // 设置按钮的状态
    if(index == 5){
        sender.enabled = NO;
    }
    
    // 设置删除按钮的状态
    self.removeButton.enabled = YES;
    
    
}


- (IBAction)remove:(UIButton *)sender {
    // 删除最后一个商品
    UIView *lastShow = [self.shopCarView.subviews lastObject];
    [lastShow removeFromSuperview];
    
    // 设置索引值
    //self.index -= 1;
    self.addButton.enabled = YES;
    if(self.shopCarView.subviews.count == 0){
        self.removeButton.enabled = NO;
    }
    
    
}

@end

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

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

相关文章

涂鸦智能打造专业家庭智能生活助手,实现人机交互升级

近年来&#xff0c;智能家居设备的品类不断拓展&#xff0c;同时&#xff0c;人们对AI与智能家居的联动愈发憧憬。自然语言交互是未来人机交互的主要趋势之一&#xff0c;其关键在于使AI具备主动理解信息的能力&#xff0c;让用户的交互更轻松。如何将智能场景的交互变得更“善…

MySQL-DDL-表结构操作-创建-案例

案例 根据页面原型/需求创建表&#xff08;设计合理的数据类型、长度、约束&#xff09; 具体操作 在idea中使用可视化图形界面创建 具体操作如下&#xff1a; 在该界面中进行属性的创建&#xff0c;进行属性名称、数据类型、约束、描述等信息的填写最终运行结果如下&…

800V高压电驱动系统盘点

2023年上海车展共有23家厂商的63个电驱动产品&#xff0c;经过梳理&#xff0c;本次展出的800V高压电驱动共有13款&#xff0c;可以说电驱动全面进入高压化。800V电驱动是一个系统性的话题&#xff0c;对于电机而言&#xff0c;挑战的方向主要围绕高速、高压、散热&#xff0c;…

替换空格

替换空格 请实现一个函数&#xff0c;把字符串 s 中的每个空格替换成"%20"。 题目给的测试用例里有以下限制&#xff1a; 0 < s.length < 14。 split() 把字符串分割为子字符串数组 例如&#xff1a; var txt"ABCD EFGH IJKL MNOP QRSTU VWXYZ"; v…

微信小程序下拉选择

微信小程序中下拉框选择一般的交互方式有以下两种 直接下拉选择点击选择框后&#xff0c;弹出浮层进行选择 下边分别介绍两种方式的实现。在微信小程序中&#xff0c;这两种实现都需要修改三个文件 js 文件&#xff1a;下拉选择逻辑的具体实现 wxml 文件&#xff1a;下拉组件…

C#正则表达式校验某个字符串是否是合格的email

C#正则表达式校验某个字符串是否是合格的email 可以借助正则表达式校验某个字符串是否是合规的电子邮箱。对于邮箱的正则表达式有严格的模式&#xff0c;如&#xff1a;^[a-zA-Z0-9_&*-](?:\\.[a-zA-Z0-9_&*-])*(?:[a-zA-Z0-9-]\\.)[a-zA-Z]{2,7}$ 对应的C#实现如下…

TCP编程流程和粘包

目录 1、TCP编程流程 2、粘包 1、TCP编程流程 socket() 是创建套接字&#xff0c;返回值为监听套接字描述符&#xff0c;有了套接字才能通过网络进行数据的传输。创建套接字的参数要指定服务类型&#xff0c;TCP协议使用的是流式服务&#xff08;SOCK_STREAM&#xff09;。 b…

用Matlab听音乐 - 动态频谱

文章目录 高帧率版本效果: 定时器版本music_play主函数&#xff1a;定时器回调函数&#xff1a;效果: 高帧率版本 由于matlab这款科学计算软件本身庞大略显笨重&#xff0c;执行代码的速度受当前系统影响&#xff0c;很难做到严格定时仿真&#xff08;造成音画不同步&#xff…

互联网行业真的不行了吗?

文章目录 前言一、起因二、互联网真的完了吗&#xff1f;三、是不是要转行&#xff1f;四、十年磨一剑五、统一回复 前言 英雄算法联盟 - 七月集训 已经开始 16 天&#xff0c;八月算法集训 将于 08月01日 正式开始&#xff0c;目前已经提前开始报名&#xff0c;报名方式参见&a…

英国24所顶尖大学撤销禁令,更新AI使用规定!

自从ChatGPT展现了其高超的AI技术后&#xff0c;备受全球年轻人的喜爱。ChatGPT功能多样化&#xff0c;可以节省查阅复杂文献的时间、编写简单的Python代码、辅助学生理解知识点... 同时&#xff0c;ChatGPT引发的学术不诚信问题也让各大院校头疼不已。 连续数月以来&#xff…

js 浮点位数超过17位乘以10^18,精度丢失问题

我有一个浮点型 var num 9.963407954080194743 用num * (10 ** 18) 计算得出的结果是9963407954080195000, 但是我想要得到的结果是9963407954080194743 问ChatGPT问题得以解决&#xff1a; GPT提供的代码&#xff1a; import Big from big.js;const num1 new Big(9.9634…

从输入URL到页面渲染的整个过程

从输入URL到页面渲染的整个过程 1.DNS解析&#xff0c;把url中的域名解析成对应的IP地址。如果本地DNS缓存没有响应的记录&#xff0c;则会向DNS发送请求&#xff0c;获取相应的IP地址。 2.浏览器使用获取到的目标服务器的IP地址&#xff0c;通过TCP/IP协议与服务器建立连接&a…

python-web开发(Djaongo)课程基本内容

python-web开发&#xff08;Djaongo&#xff09;课程基本内容及其前置技术 参考内容&#xff1a; 【最新Python的web开发全家桶&#xff08;django前端数据库&#xff09;】 https://www.bilibili.com/video/BV1rT4y1v7uQ/?share_sourcecopy_web&vd_source84fd4883bb478d0…

CDA数据分析系01 anaconda

简介 数据处理集成包&#xff0c;不局限于python 创建一个新的environment conda create --name python34 python3.4 激活一个environment activate python34 # for windows conda的package管理 类似pip&#xff0c;conda install xxxx 查看已安装的python包 conda list…

利用技术优势:程序员如何通过互联网自媒体项目实现财务自由?

作为程序员&#xff0c;通过互联网自媒体项目实现财务自由是一个很好的选择。以下是一些技术优势的利用方法&#xff1a; 选择适合的自媒体平台&#xff1a;在互联网上有许多不同类型的自媒体平台&#xff0c;如博客、YouTube、Podcast等。选择适合你技术背景和兴趣的平台&…

手机忘记密码怎么办? 帮你快速解锁手机的十大软件请收好

有许多不同类型的手机锁&#xff0c;这些锁对于手机的用户或所有者来说可能非常烦人和恼人。这些锁可称为手机锁、SIM 锁、主锁或运营商锁。这些锁实际上是手机的实际限制。 为了仅在有限的国家/地区阻止电话访问&#xff0c;该区域之外的任何其他人都无法使用。 手机解锁如何…

极速上手k8s,Kubernetes 从入门到摸鱼系列-实践篇

大家好&#xff0c;我是比特桃。本文为《极速上手k8s&#xff0c;Kubernetes 从入门到摸鱼系列》的实战篇&#xff0c;旨在快速上手k8s。如没有阅读过k8s相关理论的朋友&#xff0c;可以先阅读理论篇。 1. 实践环境 k8s 的意义在于分布式大规模容器编排&#xff0c;所以如果我…

第一百零八天学习记录:C++基础:文件操作

C中对文件操作需要包含头文件<fstream> 操作文件的三大类&#xff1a; 1、ofstream:写擦破自评 2、ifstream:读操作 3、fstream:读写操作 文本文件 写文件 写文件步骤如下&#xff1a; 1、包含头文件 #include <fstream>2、创建流对象 ofstream ofs; 3、打开文…

Vue2笔记

Vue2 前端 语雀 (yuque.com) vue3: https://github.com/Panyue-genkiyo/vue3-learning vue2依据脚手架:https://github.com/Panyue-genkiyo/vue-advance vue基础不依赖脚手架:https://github.com/Panyue-genkiyo/vue-learning Vue 是一套用于构建用户界面的 渐进式框框架…

B2B2C多用户商城软件功能清单

多用户B2B2C是如今企业搭建电商平台比较火热模式&#xff0c;B2B2C包含了B2B与B2C这两者模式的特点&#xff0c;是非常具有发展前景的商城系统&#xff0c;那么一个完善的多用户B2B2C商城系统应该包含哪些主要功能呢?加速度jsudo一起来看看吧! 商品模块功能&#xff1a; 包括…