06-UIKit(tableView数据模型)
目录:
一、UIPageControl在页面下显示点
1 重要属性
.numberOfPages有多少个点
.userInteractionEnabled用户控制交互开关
.currentPage当前页
//创建图片下方的点 PageControl
UIPageControl *pageControl = [[UIPageControl alloc] init];
pageControl.frame = CGRectMake(0, self.view.frame.size.height - 50, self.view.frame.size.width, 20);
//有多少个点
pageControl.numberOfPages = self.imageNames.count;
//控制用户交互开关 点小点是否起作用
pageControl.userInteractionEnabled = NO;
self.pageControl = pageControl;
[self.view addSubview:pageControl];
这里有一个滑动页面之后调用的一个方法,这个方法是scrollview代理中的一个很重要的方法
//滑动之后调用的方法
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGPoint point = scrollView.contentOffset;
//NSLog(@"%lf,%lf",point.x,point.y);
//改变pageControl的当前也属性currentPage
self.pageControl.currentPage = round(point.x / 320);
}
二、table view数据模型
1 数据模型1 tableview -> nsarray -> 对象 -> 属性
MXMyTableViewController : UITableViewController
2 推出新的界面,基本上需要用navigation做
tableview的数据模型1是这样的:首先定义一个公开或者是似有的NSArray数组,定义一个继承自NSObject类,这个类有属性,在tableview中把这个类的引用添加到数组中,然后访问对象里的属性。
三问一响应中的一响应是这样的:就是点击tableview里的cell(中文单人小室)之后做出的响应,这个响应肯定推出一个界面,这个界面是UIViewController通常用self.navagationcontroller导航视图push这个视图,从而成为导航视图中的一个视图,在tableview的代理中系统给我们提供了一个方法来推出这个界面,这个方法是:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
在这个方法里面创建了一个uiviewcontroller视图并被navigationcontroller导航视图push出来。此时一般需要正向传值。
MXPhoto *photo = self.photos[indexPath.row];
detailViewController.bigPictureFilename = photo.bigPicuterFileName;
3 模型2:tableview -> NSArray -> 对象 -> NSArray
+(NSArray *)areas{
MXArea *a1 = [[MXArea alloc] init];
a1.name = @"北京";
a1.subNames = @[@"东城", @"西城", @"崇文", @"宣武", @"朝阳", @"海淀"];
MXArea *a2 = [[MXArea alloc] init];
a2.name = @"上海";
a2.subNames = @[@"浦东", @"洋浦", @"松江", @"虹口", @"徐汇", @"闸北"];
MXArea *a3 = [[MXArea alloc] init];
a3.name = @"广州";
a3.subNames = @[@"天河", @"棠下", @"越秀", @"白云"];
return @[a1,a2,a3];
}
程序流程:
1.创建MXAreaTableViewController
2.注入Model数据
3.navi显示MXAreaTableViewController,三问?几个分区,几行,每一行cell
4.一响应,实现didSelectRowAtIndexPath方法
在方法中推新的tableViewController,在推新的tableViewController之前需要正向传值,
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
MXSubAreaTableViewController *detailViewController = [[MXSubAreaTableViewController alloc] initWithNibName:@"MXSubAreaTableViewController" bundle:nil];
// 传值
MXArea *area = self.areas[indexPath.row];
detailViewController.subAreas = area.subNames;
detailViewController.title = area.name;
// Push the view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
}
加深理解
模型2:NSArray 1-> 对象 -> NSArray2
NSArray 1中有多少个对象就有多少个section。
每个section有多少行,以section做为下标拿到对象,对象中的NSArray2中有多少数据,就有多少行。
每一行是cell,先通过indexPath.section确定是哪个对象,在通过indexPath.row确定此对象中的NSArray2是哪个。
return self.areas.count;//返回区数
MXArea *area = self.areas[section];
return area.subNames.count;//返回行数
MXArea *area =self.areas[indexPath.section];//区
cell.textLabel.text = area.subNames[indexPath.row];//行
加一问:每个section的header叫什么名字,tableview遵守的协议UITableViewDataSource中提供了一个方法解决这个问题
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
MXArea *area = self.areas[section];
return area.name;
}
三、反向传值给TableView并更新
1 输入界面MXInputViewController(委托方)
三步曲:
1)定义委托协议
2)定义委托属性delegate
3)用户输入完成后调用委托对象的方法,传参
2 显示界面MXMemoireViewController(被委托方) TableView
三步曲:
1) 遵守委托协议
2) 实现委托方法
3) 设置当前对象为委托方的delegate
在委托方法中:
1)更新Model数据
2)更新界面
两种方式:
//更新界面 两种方法
// 1 全部更新 不推荐使用
//[self.tableView reloadData];//重新加载 全部加载 代价大
// 2 逐行添加 只更新指定行
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:self.memoires.count-1 inSection:0];
[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
作业:
1. 写一个模仿通讯录的程序
1)数据模型:
MXContact:
-firstName: 姓
-lastName: 名
-phoneNumber: 电话号码
-iphone: 电话号码
2)显示界面
Navigation包TableViewController
TableViewController
-contacts : NSMutableArray
-[item] MXContact
3)添加联系人界面
自己设计,要求不能用navi push此界面,要用present来展示此界面,但此界面也有自己的NavigationController
会涉及反向传值, 使用委托
2. 春节前淘宝广告:
做一个TableViewController的界面,界面的最上面一行是广告栏,再下面才是商品列表
广告是一个Cell, Cell中有一个UIScrollView, UIScrollView中有多个UIImageView, 多个imageView可以滚动
控制frame的问题
补充知识点:
[NSMutableArray copy];NSMutableArray调用copy方法返回NSArray
06-UIKit(tableView数据模型)的更多相关文章
- UITableView 学习笔记
http://www.cnblogs.com/smileEvday/archive/2012/06/28/tableView.html UITableView学习笔记 作者:一片枫叶 看TableVi ...
- (转)IOS UITableView学习
转自:http://www.cnblogs.com/smileEvday/archive/2012/06/28/tableView.html 作者:一片枫叶 看TableView的资 ...
- UITableView(转)
一.UITableView概述 UITableView继承自UIScrollView,可以表现为Plain和Grouped两种风格,分别如下图所示: 其中左边的是Plain风格的,右 ...
- iOS - UIView
前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIView : UIResponder <NSCoding, UIAppearance, UIAppeara ...
- 08-UIKit(UITableTableViewCell、自定义Cell、xcode调试)
目录: 1. UITableTableViewCell 2. tag技术 3. 自定义Cell 4. 用nib文件构造自定义的静态表 5. TableView数据模型总结 6. Xcode代码调试 & ...
- iOS网络加载图片缓存与SDWebImage
加载网络图片可以说是网络应用中必备的.如果单纯的去下载图片,而不去做多线程.缓存等技术去优化,加载图片时的效果与用户体验就会很差. 一.自己实现加载图片的方法 tips: *iOS中所有网络访问都是异 ...
- iOS UIKit:TableView之表格创建(1)
Table View是UITableView类的实例对象,其是使用节(section)来描述信息的一种滚动列表.但与普通的表格不同,tableView只有一行,且只能在垂直方向进行滚动.tableVi ...
- iOS UIKit:TableView之编辑模式(3)
一般table view有编辑模式和正常模式,当table view进入编辑模式时,会在row的左边显示编辑和重排控件,如图 42所示的编辑模式时的控件布局:左边的editing control有表 ...
- iOS UIKit:TableView之单元格配置(2)
Table View是UITableView类的实例对象,其是使用节(section)来描述信息的一种滚动列表.但与普通的表格不同,tableView只有一行,且只能在垂直方向进行滚动.tableVi ...
随机推荐
- C++设计模式之状态模式(四)
4.状态模式总结 状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象能够让环境对象拥有不同的行为.而状态转换的细节对于client而言是透明的.client不直接操作 ...
- No.3小白的HTML+CSS心得篇
A--看的东西多了总会出现好多模糊不清的又长的很像的的词语 今天对此进行区别分析下 1. align 与 text-align的区别 align 在W3Cschool中是这样解释的 ----alig ...
- Enze Third day(c#中选择结构【if...else】)
哈喽,又到了我总结课堂知识的时间了.今天在云和学院学的是C#中的“选择结构”下的If语句.下面就来总结一下今天所学的吧. 理论:If语句是最常用的选择结构语句.它主要根据所给定的条件(常由关系表达式和 ...
- 基于hash的文档判重——simhash
本文环境: python3.5 ubuntu 16.04 第三方库: jieba 文件寄于github: https://github.com/w392807287/angelo_tools.git ...
- 简单字符串模式匹配算法的C++实现
/* * simpleIndex.cpp * Author: Qiang Xiao * Time: 2015-07-13 */ #include<iostream> #include< ...
- js的初始化
在项目中遇到了类似于这样的js, myinit.js文件: var wyl_01 = { tip : function(msg){ alert('i am a tip,msg:'+msg); }, t ...
- python成长之路11
一.线程: 创建线程有两种方式(本质是一样的,创建好线程之后,cpu调度创建好的线程时执行的其实是Thread的run()方法): import threading def f1(args):prin ...
- BZOJ 1087
var f:..,..,..] of int64; a:Array[..] of longint; count:..] of longint; ans:int64; n,m:longint; proc ...
- java大作业 KShinglingAlgorithm
wiki上关于KShingling Algorithm(w-shingling)的说明: http://en.wikipedia.org/wiki/W-shingling 摘要: In natural ...
- Activity的onSaveInstanceState()和onRestoreInstanceState()以及API详解
为了弄清楚onSaveInstanceState()方法和onRestoreInstanceState()方法,我翻译一下谷歌的API,翻译如下: There are a few scenarios ...