简介 iOS在写视图的有的人喜欢纯代码去写,从之前的绝对定位方式(Frame),到现在的自动布局(Autolayout),但这种方式的好处是便于复制修改和装X,但是缺点是代码不容易看,不便于修改 也有人喜欢所见即所得 添加AutoLayout边距约束时如何不使用margin约束 通常我习惯于在xib或者StoryBoard中用右键drag拖线的方式设置autolayout约束,但是默认的autolayout边距约束可能是带 添加第三方字体 把字体ttf文件像普通文件加入到项目中,在xib或storyboard中就可以直接使用新字体了 属性设置 但是很多属性的设置 在xib中是不能完全自定义的,作为一个喜欢用xib这种方式的码客来说 ,当然能最大限度的使用xib可自定义的属性当然是极好的,下面就说一下一些不常用的从xib中可设置的属性 这些属性的设置在右面设置菜单的第三个选项卡的User Defined Runtime Attributes Xcode 6以上支持一种新的方法,特好用 其实就是为UIView添加扩展 或 继承 添加IBInspectable的属性 既可以图形化设置某些属性 这样在右侧的第四个选项卡中神奇的出现了自定义的设置项
前言 目标就是方便的将xib写的视图 方便的封装成一个组件来用 代码及使用方式 OC代码 ZJXibView.h #import <UIKit/UIKit.h> @interface ZJXibView self.contentView.backgroundColor = UIColor.clear self.addSubview(self.contentView) } } 使用方法 比如我们的xib名字为ZJUserPicView.xib 就必须建一个相同名字的类ZJUserPicView.swift并继承ZJXibView ZJUserPicView.swift import override func awakeFromNib() { super.awakeFromNib() } } ZJUserPicView.xib的File's Owner 的Class指定为ZJUserPicView.swift 然后连接picImageView和nameLabel 这样ZJUserPicView就可以整体做一个组件来用了 完整示例 Swift示例 ObjectC
领8888元新春采购礼包,抢爆款2核2G云服务器95元/年起,个人开发者加享折上折
的用法 1.7 @property 2.1 字典转模型的实现步骤 2.2 字典转模型的过程 3.1xib 的加载方式 3.2 xib与storyBoard的异同点 4.1 View的封装 4.2 文件的加载)->实现按钮的监听方法 5、使用类方法加载xib,简化代码搭建界面 6、自定义视图,使用数据模型装配视图内容 若一个view的内部子控件比较多,通常会考虑自定义一个view 把内部的子控件创建屏蔽起来 CGFloat is not a class, it is a typedef for double (a basic type). 1.5 instancetype简介 OC中,在IOS7之后主推 ,让编译器主动推动对象的实际类型,以避免使用ID,造成开发中不必要的麻烦 1.instancetype 只能使用于返回值类型,不能像id一样用于参数类型;但instancetype比id多的一个好处是: of type 'KNAppInfo *'),以避免使用ID造成开发中不必要的麻烦 2.Init方法应该遵循Apple生成代码模板的命名规则,返回类型应该使用instancetype而不是id。
made in 小蠢驴的配图 说起iOS开发,很多人的印象就是-弄一个tableView,把数据全丢到上面展示,听起来好像很粗糙,不过仔细一想,确实展示数据内容的,用的tableView是最多的了吧 本文的主题是--tableViewCell的高度自适应,计算cell高度的方法确实有好几种,因为做cell的时候,比较简单的界面我都是直接拉xib,手动连接约束比较省事,所以今天就来探索一波-- 使用xib xib的约束展示 如图,我们知道label只要设置两条约束,宽和高都可以自动实现内容的自适应,但是,这里如果不设置宽(添加右侧约束 == 确定 宽),label的宽会无限大,无限跑到内容的外部去 ? 修改完的展示 此时,label相互之间的约束冲突就解决了~ ---- 接下去,就是设置tableViewCell的高度自适应的问题了; xib的快捷设置方法:1.在xib中,设置 顶部 和 底部 约束之后 ; 2.手动计算 高度 约束的值 3.使用Xcode自动适应Cell
一.SQLite的使用 采用SQLite数据库来存储数据。SQLite作为一中小型数据库,应用ios中,跟前三种保存方式相比,相对比较复杂一些。还是一步步来吧! .dylib与前者的区别暂时不知,两者应该差不多);在项目文件中头文件或者源文件中添加头文件#import "/usr/include/sqlite3.h" 第二步:开始使用SQLite: 1.打开数据库 使用前注意:如果不往数据库里面添加任何的表,这个数据库等于没有建立,不会在硬盘上产生任何文件,如果数据库已经存在,则会打开这个数据库。 这是因为数据库默认使用ascII编码方式。所以要想正确从数据库中取出中文,需要用NSString来接收从数据库取出的字符串。 二.FMDB的使用 github地址是https://github.com/ccgus/fmdb // 继承 # pod 'FMDB/SQLCipher' 1.FMDB的创建: NSString
Xcode 5 中 xib 文件格式的调整 Xcode 升级到 5 之后, iOS 的 xib 文件发生了变化, 导致 Xamarin Studio 中自带的 iOS ViewController 模板出错了 在界面设计器中, 看到第第一个对象是 View 。 上面的 xib 文件在 MonoTouch 下运行没有任何问题。 在 Xcode 更新到 5.x 之后, 默认的 xib 文件如下: <? 当编译目标为 iOS7 是还能显示额外的布局指南 (Layout Guide) : ? 还有一些 ViewController 额外的属性: ? Create 方法创建的 ViewController 终于可以使用了。 注意: 使用 MvvmCross 的也可能会遇到同样的问题, 这就需要重写 mvx 默认的 MvxTouchViewsContainer 的 CreateViewOfType 方法 (默认只简单的通过反射创建
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...
比如我们在写消息列表的时候,未读消息一般都有个红点,点击一下红点消失。这个功能通常的做法就是Model中标识消息已读。然后在Reload TableView或者Cell。 _msgDataArr[indexPath.row]; [msgModel removeObserver:cell forKeyPath:@"isRead"]; } } 使用 KVO来监听isRead属性,当点击Cell的时候处理 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath
怎么让继承的类直接使用XIB的布局试图 最近做的一个小工具,一键替换key,就是为了解放双手,不然每次运行测试和正式的版本都要手动的替换key。 自己几乎所有的项目都是用的全代码,但是平时demo和一些小工具还是用上可视化试图和最新语言Swift. 做到是一个mac程序,几个界面基本上的功能按钮都是一样的。就封装了一个类,用上了xib。 但是拖拽一个NSView,继承与我们刚才的自定义试图,运行发现出不来我们XIB界面。 我自己分析了一下原因,虽然我们让XIB的类指向我们自己自定义试图,但是关联不起来试图。 (coder: NSCoder) 这两个方法里面读取Nib里面的试图获取到设置为自定义试图的大小。 最后对于Xib这一块不是很熟悉就没走通,后来经过搜索,解决了我的问题。 但是我们的是自定义试图,用不上NSViewController。就新建一个xib来做了。 ? 名字命名为OToolBarView.xib我们在xib里面关联刚才创建的类。 ?
我们在开发 iOS 程序的时候,往往都会根据需要导入很多的第三方框架,但是不同的框架完成的功能不同,所以导入的方式也不同,并不是把它直接拖进工程中就完事了,我们需要配置各种环境,链接各种库文件等等。 网上也有类似的教程,但是有些很旧,有些写的不详细,导致新手在使用的时候整的一头雾水,我就来说下。 ### 第五步: 进入你的工程目录,这里建议直接右键你工程中.xcodeproj 文件选择在终端中打开,然后 在终端中输入命令 cd .. 以后打卡工程就直接打开这个文件就好啦 其中 podfile 文件中显示了我们这个工程中所以集成的第三方, 想修改版本的话就把后面的版本号改成你所需要的版本号就好,想删除的话就把这行删掉,想添加的话就用第五部的搜索命令去搜索然后同样把搜索结果中以 注意以上所有的增删改操作完成之后需要在去终端中相应的目录下使用 pod install --verbose --no-repo-update 命令来更新,这样才会真正的生效。
上面是后端同学按照照module的方式开发的服务,在整个的项目中请求中前缀相同而每个module都有自己的前缀,结合起来整个请求URL格式就可以拆分为 HOT:PORT? 正如我们的标题一样我们采用category将统一的网络请求拆分到不同的文件中---类似服务端的module一样将器拆分到不同的文件中进行管理 ? 中附带一个module对应的参数---user,对应的Oder也会添加一个order作为模块url参数的前缀 然后是模块对应的url的管理啦: ? 如上图每个模块都有自己的path对应url,我们可以统一的防止在category对应的头文件中 ? 总之一句话就是分而治之,将杂而乱的url分化到不同的模块中去,按照每个模块的特性去进行管理 最后我们看看怎么使用吧 user模块的网络请求实例 NSDictionary * params = @{@
在构建一个应用的MVC框架中,我们希望模型、视图、控制这三部分都尽可能的低耦合,而苹果推荐的视图部分构建则是通过XIB或者SB来完成的。 因为MyLayout中的各种布局视图类其实都是从UIView派生的,因此MyLayout是完全可以和XIB以及SB混合使用的。 第一步就是要将XIB或者SB中对AutoLayout和Size Classes的支持去掉: ? 代码和编辑器结合布局 和AutoLayout结合使用方法 上面的例子介绍的是在不使用AutoLayout时如何将MyLayout和XIB以及SB结合的场景,那么如果我们使用AutoLayout并且想用到 AutoLayout和MyLayout混合使用 TangramKit对XIB以及SB的支持 目前TangramKit并没有在XCODE的界面编辑器中定义出可设置的扩展属性。
ios9中 UIStackView的使用 by 伍雪颖 UIStackView能够 垂直或水平排布多个subview, 自己主动为每一个subview创建和加入Auto Layout
iOS中UIWebView的使用详解 一、初始化与三种加载方式 UIWebView继承与UIView,因此,其初始化方法和一般的view一样,通过alloc和init进行初始化,其加载数据的方式有三种 ,用于寻找html文件中引用的图片等素材。 (4_0); 设置是否使用内联播放器播放视频 @property (nonatomic) BOOL mediaPlaybackRequiresUserAction NS_AVAILABLE_IOS(4_ @property (nonatomic) BOOL keyboardDisplayRequiresUserAction NS_AVAILABLE_IOS(6_0); 设置用户交互模式 三、iOS7中的一些新特性 (nonatomic, readonly) NSUInteger pageCount NS_AVAILABLE_IOS(7_0); 获取分页数 四、webView协议中的方法 - (BOOL)webView
iOS中UIPopoverController使用详解 一、引言 UIPopoverController是Pad设备中常用的一种视图控制器,其在UI表现上为在当前视图控制器上面弹出一个子视图控制器 UIPopoverController只能用于iPad,在要兼容iPad和iPhone的项目中,需要根据设备类型使用两套代码。 /* 默认情况下,当视图控制器弹出时,点击界面上的其他位置,视图控制器会被隐藏 如果需要当视图控制爱弹出时界面上的其他控件依然可以进行用户交互,则需要将这些UI控件设置进这个数组中 */ @property 对象的popoverBacjgroundViewClass属性可以将一个自定义的类作为控制器的背景视图,需要注意,此自定义的类必须继承自UIPopoverBackgroundView,并且子类必须覆写父类中的一些列方法 UIPopoverPresentationContriller的使用需要和UIViewController结合进行,使用过程示例如下: UITableViewController tabCon = [[
该怎么说呢,这是一个很坑的事情,今天在完成一个界面的时候,用了xib来自定义UICollectionViewCell。 mainBundle]]; [_collectionView registerNib:nib forCellWithReuseIdentifier:@"MyCollectionCellID"]; //使用集合视图单元格 cell是可以获取,但是其上与代码文件关联的视图对象却都是nil。 我去,我整整找了一个多小时的问题,却被一次不经意的clean重新编译把问题解决了。 回想一下编码的过程,我刚开始使用了autolayout,后来没有使用了,我想可能就是因为反复修改之后的编译缓存带来的问题。 唉,不得不说xocde的bug还是不少的,在这里记下这个坑,希望对大家有用。
iOS中通知中心NSNotificationCenter应用总结 一、了解几个相关的类 1、NSNotification 这个类可以理解为一个消息对象,其中有三个成员变量。 ,不可以使用init进行初始化 2、NSNotificationCenter 这个类是一个通知中心,使用单例设计,每个应用程序都会有一个默认的通知中心。 二、通知的使用流程 首先,我们在需要接收通知的地方注册观察者,比如: //获取通知中心单例对象 NSNotificationCenter * center = [NSNotificationCenter ":@"123"}]; //发送消息 [[NSNotificationCenter defaultCenter]postNotification:notice]; 我们可以在回调的函数中取到 疏漏之处 欢迎指正 学习使用 欢迎转载 专注技术,热爱生活,交流技术,也做朋友。 ——珲少 QQ群:203317592
结论:嵌套中的block只需要写strongify,不需要再写一次weakify 只要持有block的变量和block中的变量不是同一个变量(可以指向同一个变量),就不会因此循环引用,导致memory typeof__(self) self = self_weak_; [self doSomething]; }; }; 通过对比可以发现,第二层嵌套外增加的weakify (self)编译之后为__attribute__((objc_ownership(weak))) __typeof__(self) self_weak_ = (self);,和第一层嵌套外加的weakify (self)编译之后的代码一样,做了相同的工作,无非就是重新定义了一个没有发生变化的self_weak_变量。 所以,当block嵌套block的时候,内部的block不需要再次增加@weakify(self)。
前言 现在多数项目中会有使用webView的情况,过去往往使用UIWebView解决问题,但是由于其各种不便,给开发者带来了很多麻烦。 ,里面有很多属性可以使用,但是这里我只进行最简单使用的说明。 ,需要说明的是由于我们使用的是需要和JS进行交互的webView,所以需要在ViewController中声明两个代理WKNavigationDelegate,WKScriptMessageHandler ,这里其实是通过调用webView直接使用JS代码实现的操作,如果有需要还可以实现别的功能,而且这个方法最后有一个执行完毕之后的block,可以实现很多操作。 self.navigationController popViewControllerAnimated:YES]; } if ([self.webView canGoBack]) { //控制订单列表中的较多界面折回
移动推送TPNS(原信鸽)为应用提供合法合规、消息通道稳定、消息高效秒达、全球服务覆盖的消息推送服务,已稳定服务腾讯游戏、腾讯视频等超高日活应用;支持App推送、应用内消息、智能短信等多种消息类型,有效提升用户活跃度。
扫码关注腾讯云开发者
领取腾讯云代金券