代码布局抛弃storyboard,用代码生成界面,它的优劣不谈

首先在项目设置中,更改应用的“入口”

不选main,清空它

然后在AppDelegate.m中,更改(添加内容),别忘了import

  1. 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  2. 2 // Override point for customization after application launch.
  3. 3 self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
  4. 4 self.window.rootViewController = [[ViewController alloc]init];
  5. 5 [self.window makeKeyAndVisible];
  6. 6 self.window.backgroundColor = [UIColor greenColor];
  7. 7 return YES;
  8. 8 }

// why???

接着你就可以新建属于自己的View,注意父类

然后可以在Viewcontroller中添加函数

  1. 1 -(void)loadView
  2. 2 {
  3. 3 self.view = [[MainView alloc]initWithFrame:[UIScreen mainScreen].bounds];
  4. 4 }

这里loadView是已有的函数,只不过你不声明并且添加自己的内容的话,它会按默认的来,就像model中默认构造好的混合,getter和setter一样,它负责加载界面。(顺便view也是默认的

在这个子函数里调用方法,初始化了自己的View,接下来就可以为自己的View添加内容了。

以下代码为自己的View,MainView.m 和 .h 中的内容

首先,你可以重写

- (instancetype)initWithFrame:(CGRect)frame

这个构造函数默认是存在的,你可以在ViewController中调用它,即便你没有重写。

你可以把你想要构造的UI等等东西放在这个函数里

重写时如果直接写,xcode会警告,没有进行父类操作,建议你先进行父类的构造,因为现在你在写的是一个子类的构造函数,要调用的东西都是父类的,而父类并没有“实例”,所以直接调用、使用时不正确的,所以先

  1. if(self == [super initWithFrame:frame])
  2. {
  3. self.backgroundColor = [UIColor whiteColor];
         //其他代码
  4. }

接下来可以在其他代码处写自己的控件了

  1. @property UILabel *LBnum;

例如在.h中定义了一个Label

接下来就可以构造它

  1. 1 _LBnum = [[UILabel alloc]initWithFrame:({
  2. 2 CGRectMake(0, 0, 20, 20);
  3. 3 })];
  4. 4 [_LBnum setBackgroundColor:[UIColor greenColor]];
  5. 5 [self addSubview:_LBnum];

先随意设置参数构造一下,测试一下

先带参数构造,然后设置背景颜色以便我们能找到它,最后添加它

显然它是以左上角为(0,0)的

接下来就可以设置为自己想要的样式了

自己随便写的demo:

  1. 1 - (instancetype)initWithFrame:(CGRect)frame
  2. 2 {
  3. 3 if(self == [super initWithFrame:frame])
  4. 4 {
  5. 5 self.backgroundColor = [UIColor whiteColor];
  6. 6
  7. 7 }
  8. 8
  9. 9
  10. 10
  11. 11 //UILabel *LBnum;
  12. 12 _LBnum = [[UILabel alloc]initWithFrame:({
  13. 13 CGRectMake(50, 50, MAINSCREENWIDTH - 100, MYHEIGHT);
  14. 14 })];
  15. 15 //[_LBnum setBackgroundColor:[UIColor greenColor]];
  16. 16 [_LBnum setText:@"还有3颗雷"];
  17. 17 [_LBnum setTextAlignment:NSTextAlignmentCenter];
  18. 18 [self addSubview:_LBnum];
  19. 19
  20. 20
  21. 21 //Button keys
  22. 22 _keys = [[NSMutableArray alloc]init];
  23. 23 int keycount = 0;
  24. 24 for(int i = 0; i < 3; i++)
  25. 25 {
  26. 26 for(int j = 0; j < 3; j++)
  27. 27 {
  28. 28 keycount ++;
  29. 29 //UIButton *key = [[UIButton alloc]initWithFrame:CGRectMake((50 + MYWIDTH)*(j+1) - MYWIDTH, 100+MYHEIGHT + i*(50+MYWIDTH) , MYWIDTH, MYWIDTH)];
  30. 30 UIButton *key = [UIButton buttonWithType:UIButtonTypeSystem];
  31. 31 key.frame = CGRectMake((50 + MYWIDTH)*(j+1) - MYWIDTH, 100+MYHEIGHT + i*(50+MYWIDTH) , MYWIDTH, MYWIDTH);
  32. 32 //[key setTitle:[NSString stringWithFormat:@"%d(%d,%d)",keycount,i,j] forState:normal];
  33. 33 [key setTitle:[NSString stringWithFormat:@"?"] forState:normal];
  34. 34 [key setBackgroundColor:[UIColor blackColor]];
  35. 35 [_keys addObject:key];
  36. 36 [self addSubview:key];
  37. 37
  38. 38 }
  39. 39 }
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45 return self;
  46. 46 }

接下来为我自己写的9个按键绑定方法,方法是controller的任务,所以现在转到viewcontroller中去

在自己写的loadview中去绑定,self.view时,view实际上并不是自己的Mainview类型,所以它不知道自己定义的子类中都有什么,所以最好把类型提前声明,可以不占用默认的view,自己定义

  1. 1 @interface ViewController ()
  2. 2
  3. 3 @property MainView *mview;
  4. 4
  5. 5 @end
  6. 6
  7. 7 @implementation ViewController
  8. 8
  9. 9
  10. 10 -(void)loadView
  11. 11 {
  12. 12 _mview = [[MainView alloc]initWithFrame:[UIScreen mainScreen].bounds];
  13. 13 self.view = _mview;
  14. 14 for (UIButton *onekey in _mview.keys)
  15. 15 {
  16. 16 [onekey addTarget:self action:@selector(keysPressed:) forControlEvents:UIControlEventTouchUpInside];
  17. 17 }
  18. 18 }
  19. 19
  20. 20 -(IBAction)keysPressed:(id)sender
  21. 21 {
  22. 22 printf("1");
  23. 23 }

几个参数的类型及作用xcode的自动补全都有提醒,最好自己学习一下,起到绑定作用的语句是

  1. [onekey addTarget:self action:@selector(keysPressed:) forControlEvents:UIControlEventTouchUpInside];

然后就可以自己写自己的响应函数,完成自己想完成的功能了

SSH git@github.com:kakinuma4ko/iOSDemo.git

iOS开发 objective C 代码布局的更多相关文章

  1. iOS开发关于Block代码错误

    本文永久地址为http://www.cnblogs.com/ChenYilong/p/4052362.html ,转载请注明出处. iOS开发关于Block代码错误 Incompatible bloc ...

  2. 【好程序员笔记分享】——iOS开发之纯代码键盘退出

    -iOS培训,iOS学习-------型技术博客.期待与您交流!------------ iOS开发之纯代码键盘退出(非常简单)     iOS开发之纯代码键盘退出 前面说到了好几次关于键盘退出的,但 ...

  3. IOS开发 统计XCODE 代码行数

    如果要统计ios开发代码,包括头文件的,终端命令进入项目目录下,命令如下 find . -name "*.m" -or -name "*.h" -or -nam ...

  4. iOS开发技巧 -- 复用代码片段

    如果你是一位开发人员在开发过程中会发现有些代码无论是在同一个工程中还是在不同工程中使用率会很高,有经验的人会直接封装在一个类里,或者写成一个宏定义或者把这些代码收集起来,下次直接使用,或者放到xcod ...

  5. 【iOS开发-48】九宫格布局案例:自己主动布局、字典转模型运用、id和instancetype差别、xib反复视图运用及与nib关系

    本次九宫格案例: (1)导入app.plist和各种图片素材,方便兴许开发.实际开发中,也是如此. (2)把plist中数组导入进来. --由于本案例中app.plist终于是一个数组,数组里面是字典 ...

  6. iOS - 开发一套代码多个app展示不同图标和名称

    引言 公司项目重构之后,有了相对比较完善的开发体系,首先git分支分为日常.预发.生产三个主要分支,开发阶段都在日常(daily)分支下开相应功能的feature分支,开发完再合并. 我的iOS工程需 ...

  7. iOS开发——高级篇——流水布局UICollectionViewFlowLayout的基本使用

    之前看到过的一篇文章 对collectionView的使用总结的非常好:“iOS6新特征:UICollectionView介绍” 流水布局在现在的应用中很常见了,简单的研究了下,实现下面的功能 那我这 ...

  8. iOS开发tips-UIScrollView的Autlayout布局

    UIScrollViewj尽管继承于UIView,但它是一个相对比较特殊的视图,特别是当它遇到了AutoLayout之后.在UIScrollView中使用AutoLayout的目的除了使用相对约束确定 ...

  9. [转]iOS开发总结之代码规范

    转自:http://www.cocoachina.com/ios/20151014/13678.html 命名规范 总 的来说, iOS命名两大原则是:可读性高和防止命名冲突(通过加前缀来保证). O ...

随机推荐

  1. GDB 调试 .NET 程序实录 - .NET 调用 .so 出现问题怎么解决

    注:本文重要信息使用 *** 屏蔽关键字. 最近国庆前,项目碰到一个很麻烦的问题,这个问题让我们加班到凌晨三点. 大概背景: 客户给了一些 C语言 写的 SDK 库,这些库打包成 .so 文件,然后我 ...

  2. Springboot配置excludePathPatterns不生效

    Springboot添加拦截器配置excludePathPatterns不生效 code: @Configurationpublic class ServiceConfig implements We ...

  3. JVM系列【6】GC与调优5-日志分析

    JVM系列笔记目录 虚拟机的基础概念 class文件结构 class文件加载过程 jvm内存模型 JVM常用指令 GC与调优 主要内容 分析PS.CMS.G1的回收日志,目标使大概能读懂GC日志. 测 ...

  4. Django创建表时报错django.db.utils.InternalError: (1366问题解决记录

    问题出现 执行Python manage.py makemigrations生成创建表的py文件 执行python manage.py migrate创建数据表 界面出现报错 问题原因 网上搜索原因, ...

  5. 第十一章 LNMP架构基础介绍

    一.LNMP架构 1.简介 oLNMP是一套技术的组合,L=Linux.N=Nginx.M~=MySQL.P~=PHP不仅仅包含这些,还有redis/ELK/zabbix/git/jenkins/ka ...

  6. Flink + 强化学习 搭建实时推荐系统

    如今的推荐系统,对于实时性的要求越来越高,实时推荐的流程大致可以概括为这样: 推荐系统对于用户的请求产生推荐,用户对推荐结果作出反馈 (购买/点击/离开等等),推荐系统再根据用户反馈作出新的推荐.这个 ...

  7. web功能测试

    web功能测试基础: https://www.cnblogs.com/wz123/p/9680484.html

  8. python 虚拟环境安装

    windows虚拟环境的搭建 安装 # 建议使用pip3安装到python3环境下 pip3 install virtualenv pip3 install virtualenvwrapper-win ...

  9. Markdown--补充版

    markdown语法实例 markdown语法实例 强调 分割线 引用 标题Setext方式 大标题 小标题 标题Atx方式 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 无序列表 有序 ...

  10. 字节跳动2020Java面经,你离高薪就只差一片面试题了

    前言 经历了惨痛的春招与秋招之后,也积攒了一些面经,希望能对大家有所帮助.由于字数限制需要答案的可以关注GZH[程序员空间] 免费领取完整版PDF 其他 什什么是幂等?什什么情况下需要考虑幂等?你怎么 ...