Objective-C学习:UI的初步了解

文章目录

UILabel

UILabel 是 iOS 开发(UIKit 框架)中最常用的控件之一,专门用于在界面上显示只读的文本

常用属性

属性 功能描述
text 设置显示的普通字符串。
textColor 设置文字颜色(默认为黑色)。
frame 设置位置
font 设置字体大小和样式。
textAlignment 对齐方式(左对齐、居中、右对齐)。
numberOfLines 行数限制。设置为 0 表示不限制行数,自动换行。
lineBreakMode 断行模式(比如末尾显示省略号 ...)。
adjustsFontSizeToFitWidth 设为 YES 时,如果文字过长会自动缩小字号以适应宽度。
alpha 设置透明度

基本功能

创建和初始化

objc 复制代码
UILabel* label = [[UILabel alloc] init]; 
// 设置位置 
// 左, 上, 宽, 高
label.frame = CGRectMake(100, 100, 200, 80);    
// 背景颜色
label.backgroundColor = [UIColor whiteColor];

设置文本

objc 复制代码
label.text = @"hello Mobile xxxxxxxxxxx";
// 设置文字的大小, 系统默认的大小是12
label.font = [UIFont systemFontOfSize: 24]; 
// 文字颜色
label.textColor = [UIColor systemCyanColor]; 

// 文字对齐模式       // 默认左对齐
label.textAlignment = NSTextAlignmentLeft;  // 左对齐
label.textAlignment = NSTextAlignmentRight;  // 右对齐
label.textAlignment = NSTextAlignmentCenter;  // 居中对齐 

// 设定label文字显示的行数, 默认是 1 行来显示
// 其他 > 0 的行数, 文字会尽量按照设定行数来显示
// 如果设为0, 会自动计算需要的行数
label.numberOfLines = 0;

设置文本阴影

文本阴影主要有两个属性:

  1. 阴影颜色
  2. 阴影的偏移量
objc 复制代码
// 设置阴影
label.shadowColor = [UIColor greenColor];
label.shadowOffset = CGSizeMake(20, 10);  // 左偏移量, 下偏移量

设置Label的透明度

objc 复制代码
//设置透明度
// 1. alpha = 1  不透明
// 2. alpha = 0 透明
// 3. alpha = 0.5  半透明
label.alpha = 0.5;

是否显示不透明

objc 复制代码
// 是否显示不透明(不会影响透明度)
label.opaque = NO;

UIButton

创建

如果需要让按钮显示图片原色, 需要选择自定义类型的按钮

自动定义类型的按钮 (图片)

objc 复制代码
- (void) createImageBtn {
    // 创建一个自定义类型的Btn
    UIButton* btnImage = [UIButton buttonWithType: UIButtonTypeCustom];
    btnImage.frame = CGRectMake(100, 200, 100, 100);
    UIImage* icon01 = [UIImage imageNamed: @"btn01.png"];
    UIImage* icon02 = [UIImage imageNamed: @"btn02.png"];
    
    // 设置按钮图片
    // p1: 显示的图片对象
    // p2: 控件的状态
    [btnImage setImage: icon01 forState: (UIControlStateNormal)];
    [btnImage setImage: icon02 forState :UIControlStateHighlighted];
    [self.view addSubview: btnImage]; 
}

创建系统类型按钮并设置基础属性

objc 复制代码
// 系统类型按钮 
UIButton* btn = [UIButton buttonWithType: UIButtonTypeSystem];
btn.frame = CGRectMake(100, 400, 100, 100); 
btn.backgroundColor = [UIColor systemCyanColor];

设置按钮文字内容

objc 复制代码
// 设置按钮的文字内容
// p1: 字符床类型, 显示到按钮上的文字
// p2: 设置文字显示的状态类型: UIControlStateNormal --> 正常状态
[btn setTitle: @"btn" forState: UIControlStateNormal];

// 显示文字类型: UIControlStateHighlighted --> 按下状态
[btn setTitle: @"btn is pressed" forState: UIControlStateHighlighted]; 
// 设置按钮文字颜色
[btn setTitleColor: [UIColor greenColor] forState: UIControlStateNormal];


// 设置按钮风格颜色
// 设置之后, 所有的状态都按照此风格 
// 优先级低于 setTitleColor
[btn setTintColor: [UIColor whiteColor]];

// title.Label: UILabel 空间
// 文字字体大小
btn.titleLabel.font = [UIFont systemFontOfSize: 18]; 

// 按钮背景颜色
// 这里不是按钮的颜色,只是包裹按钮文字的Label的颜色
btn.titleLabel.backgroundColor = [UIColor redColor]; 

为按钮添加事件

向按钮添加事件函数

  1. p1: "谁" 来实现事件函数, 实现的对象就是谁
  2. p2: @selctor(pressBtn): 函数对象, 当按钮满足p3事件类型时, 系统调用函数
  3. p3: UIControlEvent: 事件处理函数模型

事件调用的状态

  1. UIControlEventTouchUpInside: 当手指离开屏幕时并且手指的位置在按钮范围内触发事件函数
  2. UIControlEventTouchUpOutside: 当手指离开屏幕时并且手指的位置在按钮范围外触发事件函数 (按下在范围内, 松开在范围外)
  3. UIControlEventTouchDown: 当手指触碰到按钮上时候触发
  4. UIControlEventTouchDown: 当手指多次连续触碰到按钮 (双击)
objc 复制代码
[btn addTarget: self action: @selector(pressBtn) forControlEvents: UIControlEventTouchUpInside];
[btn addTarget: self action: @selector(touchDown) forControlEvents: UIControlEventTouchDown];

// 事件方法
- (void) touchDown {
   NSLog(@"touched");
} 
- (void) pressBtn {
   NSLog(@"Btn pressed");
}

可以通过为按钮设置标签来为事件添加参数调用事件

objc 复制代码
// 设置按钮的标记值
btn.tag = 101;
btn02.tag = 102; 

// 带参数
- (void) pressBtn: (UIButton*) btn {
   if (btn.tag == 101) {
       NSLog(@"btn01 is pressed");
   } else if (btn.tag == 102) {
       NSLog(@"btn02 is pressed");
   }
}

UIView

UIView 是iOS视图对象, 是显示在屏幕上的所有的对象的基础类, 所有显示在屏幕上的对象一定继承于UIView

UIView 是一个矩形对象, 有背景属性, 可以显示, 有层级关系

创建

objc 复制代码
UIView* view = [[UIView alloc] init];
view.frame = CGRectMake(100, 100, 100, 200);
[self.view addSubview: view];

view.backgroundColor = [UIColor orangeColor];

self.view.backgroundColor = [UIColor blueColor];

将新建的视图添加到父亲视图上

  1. 将新建的视图显示到屏幕上
  2. 将视图对象作为父亲视图的子视图管理起来
objc 复制代码
// 将新建的视图添加到父亲视图上
// 1. 将新建的视图显示到屏幕上
// 2. 将视图作为父亲视图的子视图管理起来
[self.view addSubview: view];

隐藏视图

属性 hidden 为YES时隐藏, 为NO时不隐藏, 默认为NO

objc 复制代码
view.hidden = YES; 
设置透明度
  1. alpha = 1 不透明

  2. alpha = 0 透明

  3. alpha = 0.5 半透明

objc 复制代码
view.alpha = 0.5;

从父视图删除

objc 复制代码
// 将自己从父亲视图删除
[view removeFromSuperview];

UIView的层级关系

sunviews 是管理所有self.view 的子视图的数组

​ subview是将添加的视图按照添加顺序存储的, (先添加的在最下面), 但是在subviews中索引是靠前的

bringSubviewToBack 是将子视图移动到 subviews0 (subviews 的第一个),

objc 复制代码
- (void) viewStage {
    UIView* view01 = [[UIView alloc] init];
    view01.frame = CGRectMake(100, 100, 150, 150);
    view01.backgroundColor = [UIColor blueColor];
    
    UIView* view02 = [[UIView alloc] init];
    view02.frame = CGRectMake(125, 125, 150, 150);
    view02.backgroundColor = [UIColor orangeColor];
    
    UIView* view03 = [[UIView alloc] init];
    view03.frame = CGRectMake(150, 150, 150, 150);
    view03.backgroundColor = [UIColor greenColor];
objc 复制代码
// 哪一个视图先添加到父亲视图上, 就先绘制哪一个视图
[self.view addSubview: view01];
[self.view addSubview: view02];
[self.view addSubview: view03];
objc 复制代码
// 将某一个视图调整到最前面显示
//    [self.view bringSubviewToFront: view01];
//
//    // 将某一个视图调整到最后面
//    [self.view sendSubviewToBack: view02];
    
    // sunviews 管理所有self.view 的子视图的数组
    // subview是将添加的视图按照添加顺序存储的, (先添加的在最下面), 但是在subviews中索引是靠前的
    // bringSubviewToBack 是将子视图移动到 subviews[0] (subviews 的第一个),
    [self.view sendSubviewToBack: view02];
    // sunviews 管理所有self.view 的子视图的数组
//    UIView* viewFront = self.view.subviews[2];
    
    UIView* viewBack = self.view.subviews[0];
    
    // 从父亲视图删除
    [view02 removeFromSuperview];
    
    if (viewBack == view02) {
        NSLog(@"相等");
    }
}
相关推荐
骐骥15 小时前
学习:javaScriptProxy和registerJavaScriptProxy有什么区别,能注册多少个对象
学习·鸿蒙
Huathy-雨落江南,浮生若梦5 小时前
Caddy 学习笔记 - 反向代理与 IP 封禁
笔记·学习·tcp/ip
sakiko_7 小时前
OC基础语法(与Swift对比)-1
开发语言·ios·objective-c·swift
m4Rk_7 小时前
【论文阅读】Agent 记忆机制(57):MemSearch-o1——从查询词元生长证据,重组 Deep Search 记忆路径
论文阅读·人工智能·学习·开源·github
xy34537 小时前
Axure9.0 中继器遮罩的核心应用场景(精准适配列表交互)
前端·ui·html·原型·产品设计·axure9.0
闭月之泪舞8 小时前
C++编程学习
c++·学习
网安蟹佬霸9 小时前
2026网络安全每日学习计划:每天学多久?学什么?怎么安排?照着做就行!
网络·学习·安全·web安全·学习路线·网安
一条破秋裤9 小时前
TIM 输入捕获与 PWMI:从边沿到频率、占空比
笔记·stm32·学习
2601_9499506310 小时前
考研英语资料太散?用小程序把真题、词汇和错题放到一起
人工智能·学习·考研·小程序·刷题·小程序推荐
熊猫钓鱼>_>10 小时前
鸿蒙AI Agent新范式:从“对话式辅助”到“工程化代理”的Harness架构实战解析
人工智能·笔记·学习·华为·架构·harmonyos