UI Kit提供的界面组件有三类:栏(Bars),视图(Views),控件(Controls)。 ?...导航栏控件 避免在导航栏上挤满太多控件。通常,导航栏最多只能包含视图的当前标题,后退按钮以及一个用于管理视图内容的控件。如果在导航栏中使用分段控件,则该栏不应包含标题或分段控件以外的任何控件。...例如,“邮件”使用更简洁的术语(例如“标记”和“草稿”)从每个邮箱的标题中省略了“消息”一词。 不要在侧边栏中显示超过两个层次的层次结构。...模态视图例外。因为模态视图为人们提供了一种单独的体验,使他们在完成后便会被解雇,所以这不是应用程序整体导航的一部分。 选项卡功能不可用时,请勿删除或禁用该选项卡。...例如,如果iOS设备上没有歌曲,则“音乐”应用中的“立即收听”选项卡将说明如何下载歌曲。 始终在附加视图中切换上下文。
还为标准的系统行为进行响应。从语法上 说,UIViewController是视图控制器的父类。视图控制器类是没有可视化表示的抽象类,只有它管理的视图才提供可视画布。记住:1....使用pushViewController: animated:可推入一个新的控制器,从而增加新的项到导航栈。(记住:导航栏控制器不添加一个视图进去,这个导航栏是没有意义的!)...UITabBarController类 选项卡类允许用户在多个视图控制器之间移动并在屏幕的底部可定制该栏。...或其他任何类型的视图控制器),并通过设置栏的viewControllers属性将其添加到选项卡栏,使每个选项卡对应一个试图控制器。...• –viewDidLoad:当加载控制器的视图到内存时,该方法被调用。
这是因为你并没有将MasterViewController 添加到主窗口(main window),这一步,需要在AppDelegate中进行。...现在Application Delegate 已经拥有了MasterViewController 属性,但是这并不能显示(被view controller管理的)视图到应用程序的屏幕上,我们还需要通过实例化这个属性来创建一个新的...使用initWithNibName:方法从nib(就是我们创建控制器时的Xib)文件中创建了一个新的view Controller。 2....将控制的view 添加到主窗口的容器视图(contentView)中。 3. 设置控制器view的大小与主窗口相等。...AppDelegate.m文件 运行程序,确保上面我们做的设置没有错误。为了能够显示需要的Bug 列表,我们要让table view 从模型中获取数据。
我们首先有个大致的了解,控制屏幕旋转优先级为:工程Target属性配置(全局权限) = Appdelegate&&Window > 根视图控制器> 普通视图控制器。...3.Appdelegate&&Window中设置 正常情况下,我们的App从Appdelegate中启动,而Appdelegate所持有唯一的Window对象是全局的,所以在Appdelegate文件中设置屏幕旋转也是全局有效的...当然,在一般情况下,我们的项目都是用UITabbarViewController作为Window的根视图控制器,然后管理着若干个导航控制器UINavigationBarController,再由导航栏控制器去管理普通的视图控制器...方法2: 另辟蹊径,使用模态视图 使用模态视图可以不受这种根视图控制器优先级的限制。这个也很容易理解,模态弹出的视图控制器是隔离出来的,不受根视图控制的影响。...从界面A到界面B中,如果我们使用第五节中的方法1会遇到无法显示默认横屏的情况,因为没有旋转设备,shouldAutorotate就没被调用,也就没法显示我们需要的横屏。
在上面的代码中,我们可以手动地设置了视图控制器堆栈,稍后会进行详细介绍。...,用于管理场景的代理对象以及包含要显示的初始视图控制器的StoryBoard。...项删除 注意2:AppDelegate中的有关事件循环的方法,在iOS 13后是不会走的,iOS13以下的才会收到事件回调的。...接着为SwiftUI项目创建了ContentView实例,并通过使用UIHostingController将其添加为根视图控制器。 该控制器用于将基于SwiftUI的视图显示在屏幕上。...scene(_: willConnectTo: options: )函数内,创建一个SwiftUI视图,将其放置在托管控制器中,然后将控制器分配给window属性的根视图控制器,并将该窗口放置在应用程序
面板, 然后删除 Main Interface 中的 Main 选项; (2) 创建 xib 界面设计 文件 创建 xib 文件流程 : -- 选择文件类型 : 菜单栏选择 File -> New...灰色箭头作用 : -- 作用 : 箭头表示 UI 控制器之间的切换关系, 箭头指向需要加载的 视图控制器; -- 移动箭头 : 视图中只有一个 UI 控制器, 移动箭头始终指向唯一的 一个 UI 控制器...] > 0){ // 将集合中的最后一个 UILabel 控件从布局中删除 [[self.labels lastObject] removeFromSuperview];...// 将 UILabel 控件从集合中删除 [self.labels removeLastObject]; // y 坐标自减, 用于添加控件使用...IOS 图标设置 IOS 图片设置 : 直接从文件目录将图片拖动到 Xcode 相应的设置中. -- 设置图标 : 在项目文件视图中, 点击 Images.xcassets, 选中左侧的 AppIcon
导航栏视图层级图 从图中可以看出,导航栏的底部分割线是一个UIImageView对象,而且高度只有0.5,所以我们可以据此获取到导航栏的底部分割线对象,在一个视图控制器中实现此需求,代码如下: #import...,用于优化滑动类视图(继承于UIScrollView的视图)在视图控制里的显示: iOS系统的导航栏UINavigationBar与标签栏UITabBar默认都是半透明模糊效果,在这种情况下系统会对视图控制器的...UI布局进行优化:视图控制器里面第一个被添加进去的视图是滑动类视图,并且其Frame是整个屏幕大小时,系统会自动调整其contenInset,以保证滑动视图里的内容不被UINavigationBar与UITabBar...,默认值是UIRectEdgeAll,即:当前视图控制器里各种UI控件会忽略导航栏和标签的存在,布局时若设置其原点设置为(0,0),视图会延伸显示到导航栏的下面被覆盖。...,那么视图控制器里的控件就会默认从(0,64)开始布局了,设置导航栏不透明的方法如下: self.navigationController.navigationBar.translucent= NO;
状态栏: 是透明的 始终固定在整个屏幕的上边缘 API注释 你可以将全应用的状态栏风格设计成统一的,或者给不同的视图控制器定义不同的状态栏风格。...若觉得标题冗余,你也可以将标题留空。举个例子,备忘录的导航栏中就没有当前备忘录的标题,因为备忘录的第一行就已经提供了所有用户需要的内容。 ? 考虑在应用最高层级的导航栏中放置一个分段控件。...可以在工具栏里放置分段控件以方便用户快速切换当前内容的不同视图或模式。在工具栏中提供应用全局的任务或者模式分段控件是不恰当的,因为工具栏中的所有操作都应当是针对当前屏幕和视图的。...API注释 想要了解如何在代码中定义活动,请参考UI Activity Class Reference.想要了解如何将活动视图控制器整合到你的应用中,请参考Activity View Controller...集合视图: 可包含装饰视图,以从视觉上区分项的子集或者提供装饰性项目,例如自定义背景。 布局切换时支持自定义转场动画。(默认情况下,当用户导入、移动或者删除项的时候,会出现系统默认的动画效果。)
该项目通过三种形式展示页面之间的切换,比如导航栏上的多个tab切换、页面左右两端箭头指示切换,以及使用分段控件。...JZNavigationExtension - 多功能导航控制器,可以透明返回栏。 NavTopImage.swift - NavigationController动态缩放titleView。...MTMaterialDelete - 非常有趣的Material Design动画,动画删除表里面的单元格。...ZWSlideViewController - ZWSlideViewController多页滑动视图控制器(类似新闻类门户APP),可以用最简单的继承方法使用,也可以不用继承,只用菜单或主视图页面,可实现丰富的定制...TYPagerController - 简单,支持定制,页面控制器,可以滚动内容和标题栏,包含多种style。
这是发生了什么: 您在Interface Builder中创建了一个新的视图控制器,并使用一些UI元素(例如按钮和标签)对其进行了设置 您可以通过使用插座属性将这些UI元素连接至代码,这将在视图控制器的属性与...Interface Builder中的UI元素之间建立连接 有一次您更改了初始插座属性的名称,并且您的应用因SIGABRT错误而开始崩溃 当您使用Interface Builder创建视图控制器时,您的应用程序运行时...(大致而言),您的应用程序将使用XIB文件生成视图控制器的UI。...此时,它将还将XIB的插座连接到视图控制器类的属性。 如果您更改了插座属性的名称,则您的应用程序将找不到它。因此,它将引发异常。导致SIGABRT错误的原因是未处理该异常。...iOS使用一种称为键值编码的机制来检查视图控制器具有的属性,因此它可以使用这些属性来引用其基于XIB创建的UI元素。 您现在如何解决该错误?
由于窗口有两个水平方向的文本视图,因此我把窗口的最小初始化size设置为(900,323),这样整个界面看起来是一个水平的长方形,便于操作和阅读 设置window的最小size 3....在StoryBoard中设置视图的controller为ViewController,这样我们就可以通过ViewController类来管理控制器和view了 设置视图控制器类型ViewController...选中ViewController.m文件,进行视图初始化设置 初始化设置 这里有个细节需要注意: 在Mac OSX中,使用NSTextView控件进行文本输入时,系统会自动将英文的双引号变为中文的双引号...实现功能代码 部分代码截图 全部代码可以从前文的项目地址下载,这里贴出需要说明的部分代码,在解析字符串时,我们常常获取的Json内容是从网页中拷贝到的,因此除了必要的去除空白字符,回车,换行和制表符之外...,到这里就简单完成了这个小工具,继续学习的,可以给这个工具添加一个状态栏按钮(可以参考我前面的文章),也许会用起来更方便哦..
iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的View,最后将控制器的View添加到UIWindow上,于是控制器的View就显示在屏幕上了。...一个iOS程序之所以能显示在屏幕上,完全是因为它有UIWindow,也就是说,没有UIWindow就看不到任何UI界面。 状态栏和键盘都是特殊的UIWindow。...那么UIWindow是如何将View显示到屏幕上的呢 这里有三个重要的对象UIScreen,UIWindow,UIView。...系统在加载storyboard的时候会做以下三件事情 创建窗口 加载mian.storyboard 并实例化view controller 分配新视图控制器到窗口root viewcontroller...3.通过storyboard加载控制器 刚才我们提到过系统在加载storyboard的时候会做以下三件事情 创建窗口 加载mian.storyboard 并实例化view controller 分配新视图控制器到窗口
@main AppDelegate —> SceneDelegate。 显示 Main.storyboard 中初始化的控制器。 Storyboard介绍 容器概念。...AppDelegate —> SceneDelegate 在 SceneDelegate 的willConnectToSession中纯代码初始化 UIWindow,并设置显示的第一个控制器。...UIView与UIViewController 初步印象 iOS 开发中,一个界面就是一个 UIViewController(视图控制器),界面上显示的内容就是 UIView(视图)。...UIView常见方法 addSubview:添加视图到父视图。 removeFromSuperview:将视图从父视图中移除(需提前讲解触摸方法)。...exchangeSubviewAtIndex:将2个位置的视图互换。 演示UIView与UIViewController Storyboard 注意左侧面板的视图层次结构。
= nil并且用户又一次进行了网络请求的时候将提示用户,并且将登录控制器展现出来。...比如,一开始没有登录的时候,运行程序,会出现登录和注册的按钮。当我们点击登录的按钮的时候,我们期望立刻弹出登录控制器。 但是我们刚才写的代码,真的有影响到这里了。...下面我们想办法测试一下 将存储用户账户相关的文件删除 然后运行程序,就直接到登录界面,然后点击登录按钮发现总是需要等待2秒钟,我们找到之前延迟两秒钟的地方处理一下。...使用layoutIfNeeded 函数让自动布局系统,提前更新当前收集到的约束变化 但是我们这里不是控制器,只是一个View,里面并没有viewDidAppear方法。我们就要找到一个类似的办法。...,所以开发时,不能在这个方法里面处理UI,而且如果是xib开发的话,你打印视图的话,结果都是nil的。
iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的View,最后将控制器的View添加到UIWindow上,于是控制器的View就显示在屏幕上了。...一个iOS程序之所以能显示在屏幕上,完全是因为它有UIWindow,也就是说,没有UIWindow就看不到任何UI界面。 状态栏和键盘都是特殊的UIWindow。...return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } 这个默认的iOS程序就是从...分配新视图控制器到窗口root viewcontroller,然后使窗口显在示屏幕上。...分配新视图控制器到窗口root viewcontroller,然后使窗口显在示屏幕上。 四大对象关系图和程序启动流程图 ? ?
该项目通过三种形式展示页面之间的切换,比如导航栏上的多个选项卡切换,页面左右两端箭头指示切换,以及使用分段控件。...FoldingTabBar.iOS - 可折叠标签栏和标签栏控制器。...所以想支持到iOS8.0,支持自定义,支持等宽排列,支持从左向右排列。 类似美团的下拉菜单 - 类似美团的下拉菜单,源码推荐说明。...ZTPageController - 模仿网易新闻和其他新闻样式做的一个菜单栏,栏中有各自的控制器,其中有4中展示样式'网易风格''搜狐风格''腾讯风格1''网易style2'。...仿LOL滚动视图 - 仿LOL滚动视图。 答案选择切换页 - 将scrollview和tableview封装在一起,在初始的时候简单的将数据带上,就可以一页一页的左右来回滑动。
我们在练习(一)中完成了状态栏图标点击,弹出内容视图的效果,但是项目看起来还有些体验不是非常符合用户习惯,(例如点击应用之外的其他地方,popover 并没有自动消失)我们继续来添加和完善一些用户功能,...添加按钮响应代码 再次运行应用,如果没有错误,点击状态栏图标,界面大概样子应该入下图: ? 应用运行效果 点击退出按钮,你会发现应用将结束进程并退出。...1.4 选中Main.storyboard文件,从项目中删除,并清空工程配置,入下图: ?...像iOS中一样,应用启动加载完成后,设置UI是从AppDelegate的这个方法-applicationDidFinishLaunching:开始的,如果我们在上面的工程中对这个方法设置调试断点,你会发现应用启动后...main.m文件实现代码 1.6 因为我们去除了window,因此ViewController对我们来说已经没有价值了,我们只需要把之前在ViewController中写的代码,放置到AppDelegate.m
AppDelegate扮演着什么样的角色? 请解释一下NSUserDefaults。就你而言,你会如何在磁盘中对数组对象进行序列化? 你会如何储存用户的认证信息? 请问何为Keychain服务?...iOS UI的图像储存类型是什么? 请描述一下Storyboard和标准NIB文件的差别。 设备状态栏(Device Status Bar)是什么?高度如何?是否透明?...在手机通话或者导航状态下,它是如何显示的? 导航栏(Navigation Bar)是什么?能否拿出你的iPhone,指出你下载的哪些应用运用了导航栏?...选项卡(Tab Bar)和工具栏(Toolbar)分别是什么?两者之间有何共同点和不同点? 表视图(Table View)是什么?集合视图(Collection View)又是什么?...选取器视图(Picker View)适合存放哪类内容? 应该在什么情况下使用标签、文本域和文本视图? 分段控件(Segmented Control)的作用是什么?
TAB 过滤选项卡 3. 通用搜索 4. 工具栏按钮 5. 动态渲染统计信息 6. 快速搜索 7. 浏览模式、显示隐藏列、导出、通用搜索 9. 复选框 10. 分类名称(关联查询) 11....TAB 过滤选项卡 ---- 在一键生成 CRUD 时,表中如果存在 status 字段且为 enum 类型,则会生成相应的 TAB 过滤选项卡 php think crud -t test 如果需要生成其它字段的过滤选项卡...工具栏按钮 ---- 一键生成菜单时会自动生成 添加、编辑、删除、更多按钮的 HTML,这些按钮会根据用户是否拥有的权限来决定显示或隐藏 我们可在控制器对应的视图文件 index.html 中任意添加、...修改 index.html 视图 (一般放在工具栏) <a href="javascript:;" class="btn btn-default" style="font-size:14px;color...快速搜索 ---- 快速搜索查询条件: where 字段 like '%关键词%' 快速搜索在键入关键词时<em>将</em>实时<em>从</em>服务端搜索数据,当数据表数据较大时,建议关闭此功能(在表格初始化时关闭) 默认只会搜索主键
UIWindow/使用纯代码加载根控制器 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow -iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的...view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了 创建的第一个对象是:UIApplication 一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow...UIViewController *mainController = [[UIViewController alloc] init]; // 给窗口指定根视图控制器 window.rootViewController...所以需要在AppDelegate.h里面创建一个强引用的属性,定义window。然后赋值。...:view属性 第一个创建的对象是UIApplication UIApplication绑定一个AppDelegate对象 AppDelegate对象中有一个window属性(UIWindow)
领取专属 10元无门槛券
手把手带您无忧上云