可视化编程:
// xib\autolayout\storyboard\sizeclasses
// xib:可以简单的把xib文件理解成一个View。xib可以简化代码(控件)创建的时间。
// autolayout:自动布局。主要是让xib或者是storyboard自行决定一个控件的位置。注意事项:
// =》 1.autolayout的核心在于“约束”。在添加约束的时候一般情况下会选择一个参照物。这里的参照物指的是已经被添加完约束的其它视图或者是view本身。
// =》 2.autolayout在添加约束的时候类型有很多。例如:左对齐、右对齐、居中对齐、上对齐、等宽等等。。通过添加约束最终的目的是为了把一个视图确定在对应的位置。
// =》storyboard:故事版。功能要比xib强大的多,除了能够展示界面之外还可以表示界面之间的关系。如果涉及到传值可能需要实现prepareforSegue方法。
// =》sizeclasses:存在的意义是方便程序员在横屏和竖屏、ipad和iphone上面页面布局的不同。
// sizeclasses有一个虚拟视图即w:any h:any。视图的宽和高都是600,凡是在这上面创建的控件在横屏和竖屏下都会显示而且所添加的约束只作用于竖屏,在竖屏状态下添加的控件也只作用于横屏。
// * 最终要学会根据需求添加约束、学会storyboard页面传值、学会storyboardCell和Xibcell,学会cell在可视化下自适应高度的问题。对于sizeclasses有一个了解,可以根据设计师给的需求,在竖屏和横屏下有不同的显示效果。
// 该方法是苹果提供给程序员用来 传值 等操作的方法,不实现该方法也可以进行界面跳转。
// 如果一个界面有多个出口(例如注册界面里面点击注册按钮可以进入到注册界面,点击反馈按钮可以进入到反馈界面时,需要给segue添加identifier标识符,通过标识符来判定到底是哪个sugue。)
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// NSLog(@"哈哈%@",sender);
// NSLog(@"source:%@ destination",segue.sourceViewController);
// SecondViewController *secondVC = segue.destinationViewController;
// secondVC.str = _nameTF.text;
//------ 多界面时需要通过添加标识来判断
if ([segue.identifier isEqualToString:@"register"]) {
SecondViewController *seconVC = segue.destinationViewController;
seconVC.str = _nameTF.text;
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// 如果用dequeueReusableCellWithIdentifier: forIndexPath: 方法即使用系统提供好的重用;这时在以下三种情况下:
// 一. 纯代码
// 在使用该方法之前需要在viewDidload方法中进行cell的注册;即使用[tableview registerClass:(nullable Class)forCellReuseIdentifier:(nullable NSString *)],第一个参数为使用哪种类似的cell(UITableViewCell还是自定义cell)。第一个参数要重用标识符。
// 二. 可视化
// 1. Xib: 如果对应的cell的布局使用的是xib,那么同纯代码一样,在使用之前也需要进行注册;即使用[registerNib:(nullable UINib *)forCellReuseIdentifier:(nullable NSString *)];第一个参数为使用哪个nib文件进行创建。 第二个参数是重用标识符。
// 2.storyboard:如果对应cell的布局使用的是storyboard;需要做的就是在storyboard中找到对应的cell,然后填写一下重用标识符。
FeedbackCell *cell = [tableView dequeueReusableCellWithIdentifier:@"test" forIndexPath:indexPath];
cell.feedback.text = [NSString stringWithFormat:@"%ld",indexPath.row];
// Configure the cell...
return cell;
}