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 是将子视图移动到 subviews[0] (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(@"相等");
    }
}
相关推荐
weixin_443478512 小时前
Flutter第三方常用组件包学习之状态管理
javascript·学习·flutter
Engineer邓祥浩2 小时前
JVM学习笔记(5) 第二部分 自动内存管理 第4章 虚拟机性能监控、故障处理工具
jvm·笔记·学习
小灰灰搞电子2 小时前
Qt UI 线程详解-阻塞与解决方案
开发语言·qt·ui
spencer_tseng2 小时前
UI 2026.03.26
ui
woai33642 小时前
JVM学习-基础篇-垃圾回收
java·jvm·学习
深蓝海拓2 小时前
S7-1500学习笔记:Array数据类型
笔记·学习·plc
MwEUwQ3Gx2 小时前
用户智能体交互协议AG-UI(下)
ui·状态模式·交互
Xudde.10 小时前
班级作业笔记报告0x04
笔记·学习·安全·web安全·php
晓晓hh11 小时前
JavaSE学习——迭代器
java·开发语言·学习