iOS开发 objective C 代码布局
代码布局抛弃storyboard,用代码生成界面,它的优劣不谈
首先在项目设置中,更改应用的“入口”

不选main,清空它
然后在AppDelegate.m中,更改(添加内容),别忘了import
1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
2 // Override point for customization after application launch.
3 self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
4 self.window.rootViewController = [[ViewController alloc]init];
5 [self.window makeKeyAndVisible];
6 self.window.backgroundColor = [UIColor greenColor];
7 return YES;
8 }
// why???
接着你就可以新建属于自己的View,注意父类

然后可以在Viewcontroller中添加函数
1 -(void)loadView
2 {
3 self.view = [[MainView alloc]initWithFrame:[UIScreen mainScreen].bounds];
4 }
这里loadView是已有的函数,只不过你不声明并且添加自己的内容的话,它会按默认的来,就像model中默认构造好的混合,getter和setter一样,它负责加载界面。(顺便view也是默认的
在这个子函数里调用方法,初始化了自己的View,接下来就可以为自己的View添加内容了。
以下代码为自己的View,MainView.m 和 .h 中的内容
首先,你可以重写
- (instancetype)initWithFrame:(CGRect)frame
这个构造函数默认是存在的,你可以在ViewController中调用它,即便你没有重写。
你可以把你想要构造的UI等等东西放在这个函数里
重写时如果直接写,xcode会警告,没有进行父类操作,建议你先进行父类的构造,因为现在你在写的是一个子类的构造函数,要调用的东西都是父类的,而父类并没有“实例”,所以直接调用、使用时不正确的,所以先
if(self == [super initWithFrame:frame])
{
self.backgroundColor = [UIColor whiteColor];
//其他代码
}
接下来可以在其他代码处写自己的控件了
@property UILabel *LBnum;
例如在.h中定义了一个Label
接下来就可以构造它
1 _LBnum = [[UILabel alloc]initWithFrame:({
2 CGRectMake(0, 0, 20, 20);
3 })];
4 [_LBnum setBackgroundColor:[UIColor greenColor]];
5 [self addSubview:_LBnum];
先随意设置参数构造一下,测试一下
先带参数构造,然后设置背景颜色以便我们能找到它,最后添加它

显然它是以左上角为(0,0)的
接下来就可以设置为自己想要的样式了
自己随便写的demo:
1 - (instancetype)initWithFrame:(CGRect)frame
2 {
3 if(self == [super initWithFrame:frame])
4 {
5 self.backgroundColor = [UIColor whiteColor];
6
7 }
8
9
10
11 //UILabel *LBnum;
12 _LBnum = [[UILabel alloc]initWithFrame:({
13 CGRectMake(50, 50, MAINSCREENWIDTH - 100, MYHEIGHT);
14 })];
15 //[_LBnum setBackgroundColor:[UIColor greenColor]];
16 [_LBnum setText:@"还有3颗雷"];
17 [_LBnum setTextAlignment:NSTextAlignmentCenter];
18 [self addSubview:_LBnum];
19
20
21 //Button keys
22 _keys = [[NSMutableArray alloc]init];
23 int keycount = 0;
24 for(int i = 0; i < 3; i++)
25 {
26 for(int j = 0; j < 3; j++)
27 {
28 keycount ++;
29 //UIButton *key = [[UIButton alloc]initWithFrame:CGRectMake((50 + MYWIDTH)*(j+1) - MYWIDTH, 100+MYHEIGHT + i*(50+MYWIDTH) , MYWIDTH, MYWIDTH)];
30 UIButton *key = [UIButton buttonWithType:UIButtonTypeSystem];
31 key.frame = CGRectMake((50 + MYWIDTH)*(j+1) - MYWIDTH, 100+MYHEIGHT + i*(50+MYWIDTH) , MYWIDTH, MYWIDTH);
32 //[key setTitle:[NSString stringWithFormat:@"%d(%d,%d)",keycount,i,j] forState:normal];
33 [key setTitle:[NSString stringWithFormat:@"?"] forState:normal];
34 [key setBackgroundColor:[UIColor blackColor]];
35 [_keys addObject:key];
36 [self addSubview:key];
37
38 }
39 }
40
41
42
43
44
45 return self;
46 }
接下来为我自己写的9个按键绑定方法,方法是controller的任务,所以现在转到viewcontroller中去
在自己写的loadview中去绑定,self.view时,view实际上并不是自己的Mainview类型,所以它不知道自己定义的子类中都有什么,所以最好把类型提前声明,可以不占用默认的view,自己定义
1 @interface ViewController ()
2
3 @property MainView *mview;
4
5 @end
6
7 @implementation ViewController
8
9
10 -(void)loadView
11 {
12 _mview = [[MainView alloc]initWithFrame:[UIScreen mainScreen].bounds];
13 self.view = _mview;
14 for (UIButton *onekey in _mview.keys)
15 {
16 [onekey addTarget:self action:@selector(keysPressed:) forControlEvents:UIControlEventTouchUpInside];
17 }
18 }
19
20 -(IBAction)keysPressed:(id)sender
21 {
22 printf("1");
23 }
几个参数的类型及作用xcode的自动补全都有提醒,最好自己学习一下,起到绑定作用的语句是
[onekey addTarget:self action:@selector(keysPressed:) forControlEvents:UIControlEventTouchUpInside];
然后就可以自己写自己的响应函数,完成自己想完成的功能了
SSH git@github.com:kakinuma4ko/iOSDemo.git
iOS开发 objective C 代码布局的更多相关文章
- iOS开发关于Block代码错误
本文永久地址为http://www.cnblogs.com/ChenYilong/p/4052362.html ,转载请注明出处. iOS开发关于Block代码错误 Incompatible bloc ...
- 【好程序员笔记分享】——iOS开发之纯代码键盘退出
-iOS培训,iOS学习-------型技术博客.期待与您交流!------------ iOS开发之纯代码键盘退出(非常简单) iOS开发之纯代码键盘退出 前面说到了好几次关于键盘退出的,但 ...
- IOS开发 统计XCODE 代码行数
如果要统计ios开发代码,包括头文件的,终端命令进入项目目录下,命令如下 find . -name "*.m" -or -name "*.h" -or -nam ...
- iOS开发技巧 -- 复用代码片段
如果你是一位开发人员在开发过程中会发现有些代码无论是在同一个工程中还是在不同工程中使用率会很高,有经验的人会直接封装在一个类里,或者写成一个宏定义或者把这些代码收集起来,下次直接使用,或者放到xcod ...
- 【iOS开发-48】九宫格布局案例:自己主动布局、字典转模型运用、id和instancetype差别、xib反复视图运用及与nib关系
本次九宫格案例: (1)导入app.plist和各种图片素材,方便兴许开发.实际开发中,也是如此. (2)把plist中数组导入进来. --由于本案例中app.plist终于是一个数组,数组里面是字典 ...
- iOS - 开发一套代码多个app展示不同图标和名称
引言 公司项目重构之后,有了相对比较完善的开发体系,首先git分支分为日常.预发.生产三个主要分支,开发阶段都在日常(daily)分支下开相应功能的feature分支,开发完再合并. 我的iOS工程需 ...
- iOS开发——高级篇——流水布局UICollectionViewFlowLayout的基本使用
之前看到过的一篇文章 对collectionView的使用总结的非常好:“iOS6新特征:UICollectionView介绍” 流水布局在现在的应用中很常见了,简单的研究了下,实现下面的功能 那我这 ...
- iOS开发tips-UIScrollView的Autlayout布局
UIScrollViewj尽管继承于UIView,但它是一个相对比较特殊的视图,特别是当它遇到了AutoLayout之后.在UIScrollView中使用AutoLayout的目的除了使用相对约束确定 ...
- [转]iOS开发总结之代码规范
转自:http://www.cocoachina.com/ios/20151014/13678.html 命名规范 总 的来说, iOS命名两大原则是:可读性高和防止命名冲突(通过加前缀来保证). O ...
随机推荐
- ASP。NET MVC的部分视图和部分模型
下载source - 1.7 MB 介绍 本文解决了返回视图内容包含表单元素的部分视图的问题. 代码重用是一种非常有用的节省时间的特性,任何优秀的工程师都会在他们的工作过程中构建许多有用的函数.对于W ...
- 联赛模拟测试14 A. 虎
题目描述 这题太虎了,所以没有背景. 给你一棵树,边有黑白两种颜色,你每次可以选择两个点,把这两个点之间的唯一简单路径上的所有边颜色取反,某些边要求最终颜色必须是黑色,还有些边没有要求,问最少操作多少 ...
- mac电脑上安装appium报错:Failed at the appium-chromedriver@4.25.1 postinstall script.
mac电脑安装appium,装好node.js后,使用命令:npm install appium@1.18.0,安装appium,报如下错误 ``` ERR! errno1 ERR! appium-c ...
- 如何将python下载源地址修改为国内镜像源
(1)在 C:\Users\xxx 下面创建新的目录 pip 文件夹 (2)在 pip目录下创建后缀为ini,名为pip的文件,另存为 (pip.ini) 文件内容设置为:(清华源) [glob ...
- 多测师讲解html _无序列表006_高级讲师肖sir
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>无 ...
- .net c#后台请求接口
我们在请求接口的时候,有时因为跨域的问题,总是请求接口失败,亦或是请求接口时,页面还存在跳转的问题,这个时候,我们通过前台ajax请求自己的一般处理程序,用一般处理程序请求客户提供的接口 //获取to ...
- sql查询:部门工资前三高的员工和部门工资最高的员工
创建表:Create table If Not Exists Employee (Id int, Name varchar(255), Salary int, DepartmentId int);Cr ...
- 第十八章 HTTPS介绍及实战演练
一.HTTPS介绍 1.概述 为什么需要使用HTTPS,因为HTTP不安全,当我们使用http网站时,会遭到劫持和篡改,如果采用https协议,那么数据在传输过程中是加密的,所以黑客无法窃取或者篡改数 ...
- 第十九章 Linux中常用字符的特殊含义
一.引入 在Linux Shell中有很多的特殊符号,要知道这些特殊符号的用法,这些符号用好了可以达到事半功倍的效果. 二.常用符号 # ; ;; . , / \ 'string'| ! {} ? $ ...
- Spring+Hibernate+Struts2整合之实现登录功能
前端代码: <form id="loginForm" action="${ pageContext.request.contextPath }/user_login ...