UI控件关联代码(Objective-C)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// ViewController
#import "ViewController.h"

// 扩展类
@interface ViewController ()
// (IBAction)是返回值,等于void,但如果想关联UI控件的执行动作,就必须设置为(IBAction)
- (IBAction) test;
@end

@implementation ViewController
// 实现
- (void) test {
NSLog(@"test");
}
@end

IBAction、IBOutlet

IBAction从返回值角度看,作用相当于void,只有返回值声明IBAction的方法,才能跟storyboard中的控件连线
IBOutlet是属性,只有声明IBOutlet的属性才能跟storyboard中的控件连线

多控件关联同一个方法只需拖到同一个IBAction上即可

获取当前控件

1
2
3
4
5
- (IBAction) test:(UIButton *) sender {
// 此时 serder 就是触发事件的按钮
// 打印tag
NSLog(sender.tag);
}

获取父控件和子控件

1
2
3
4
5
6
// superview 获取父控件
self.textTest.superview.backgroundColor = [UIColor redColor];
// subviews 获取所有子控件
for (UIView *view in self.view.subviews) {
view.backgroundColor = [UIColor redColor];
}

根据tag获取控件

首先需要在 storyboard 设置控件的 tag

1
2
// 比如获取某个文本框
UITextField *txt = (UITextField *) [elf.view viewWithTag: 1000];

移动位置

1
2
3
4
5
6
7
// 1. 获取控件 center 或 frame,center是中心点坐标,frame是左上角坐标
CGPoint centerPoint = self.btnTest.center;
// 2. 修改
centerPoint.x -=10;
centerPoint.y +=10;
// 3. 重新赋值 center
self.btnTest.center = centerPoint;

动画效果

1
2
3
4
5
6
7
8
9
10
// 1. 开启动画
[UIView beginAnimations: nil context:nil];
// 2. 设置动画执行时间
[UIView setAnimationDuration:2];

// 要执行动画的代码,比如设置位置
self.btnTest.center = centerPoint;

// 3. 提交动画
[UIView commitAnimations];

block 方式执行动画

1
2
3
4
[UIView animateWithDuration:1 animations:^{
// 要执行动画的代码
self.btnTest.center = centerPoint;
}];

加载图片

使用imageNamed:方法可以让图片缓存在内存中,直到应用退出

1
UIImage *img = [UIImage imageNamed:@"test"];

使用imageWithContentsOfFile:方法则不会有缓存

1
2
NSString *path = [[NSBundle mainBundle] pathForResource:@"test.jpg" ofType:nil];
UIImage *img = [UIImage imageWithContentsOfFile:path];

Swift创建、销毁视图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import UIKit
class DemoViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 视图最好指定背景颜色
view.backgroundColor = UIColor.whiteColor()
}
}
// 创建视图
func open() {
let vc = DemoViewController()
presentViewController(vc, animated: true, completion: nil)
}
// 销毁视图
func close() {
dismissViewControllerAnimated(true, completion: nil)
}