在xib中加入手势识别器,会被当做一个对象,所以加载xib的时候注意返回相应的对象。
cocoa 命名遵循驼峰规律,所以initwithDict 不属于构造方法(initWithDict),不能在里面对self赋值。
return cell,如果在主线程中cell.imageView.image 不设值,等异步线程下载完成图片再设置cell.imageView.image 的值,图片只有再次刷新时候显示。这是因为一开始tableviewCell没有准备imageView的尺寸而渲染到屏幕上,当异步线程设置完图片以后,这个cellimageView.image被设置,当上拉下拉滑动滑动时重新返回cell(imageView.image有尺寸)
new开头的属性名不可用。【object newXXX】返回object对象,而属性的getter方法会返回相应的属性类型的新对象,因此形成冲突直接报错。
iOS9之后,程序启动的时候keyWindow必须要有rootViewController,否则崩掉。
iOS9之后,状态栏控制默认交给最上层window(window有相应等级,默认不显示)的当前控制器管理控制。
把一个子控件加入到superview之后才可以查看到其真正的frame,如果程序刚启动,一般我们要等到程序获得焦点之后查看控件frame。
UIDatePicker继承自UIControl,而UIPickerView继承自UIView。
textField 有 inputView 和inputAccessoryView两个挺有用的属性。
控制器的view是延时加载模式,当使用的时候才会加载。比如view.backgroundcolor = UIColor redColor,此时如果load view 方法实现,则调用此方法自定义view,否则会从xib或者storyboard中加载view或者加载空view,之后调用viewDidLoad方法,只有loadView执行完毕view才算加载到窗口上。
-
storyboard
// 创建storyboard对象 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Two" bundle:nil]; // 实例化storyboard里面控制器(initial view controller箭头所指的控制器) UIViewController *vc = [storyboard instantiateInitialViewController]; // 根据id从storyboard中实例化相应的控制器 //MJTwoViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"pink”];
self.window.rootViewController = vc;
```
tableview的静态单元格使用时,如果用到自定义controller需要去除tableview的数据源方法(否则静态单元格无效)。动态原始单元格cell使用时,只需要调用dequeueReusableCell方法即可加载storyboard中的可复用cell。
-
scrollView的subviews
这里测试: _ scrollView.showsHorizontalScrollIndicator = NO; _ scrollView.showsVerticalScrollIndicator = NO; _scrollView.subviews.count == 0
cell 在reload(滑动)时会复用,而header和footer在reload时不会复用(使用UITableViewHeaderFooterView复用模式时,不知道是不是自己写错了);header和footer默认是透明的,显示tableView的背景效果。
控制器view加载之后的autoResizingMask = 18(横向竖向随父控件的拉伸而拉伸)。
继承关系:popoverPresentationController:presentationController,viewController的presentationController属性是懒加载形式,而popoverPresentationController需要先设置modalPresentationStyle = UIModalPresentationPopover(presentationController不能先被创建出来),两者一旦有一个被创建出来,另外一个都不会被创建(在popoverPresentationController被创建出来的情况下,两个指针指向同一个对象).