iOS开发——UI篇&代理/通知/Block传值(实现UItableView分组的收缩与展开)

代理/通知/Block传值实现UItableView分组的收缩与展开

初始化之后出现下面的界面

准备:

1:定义一个BOOL值用来记录点击

1 @property (nonatomic, assign, getter = isOpen) BOOL open;

2:在相应的点击方法里面是实现点击

1 self.group.open = !self.group.open;

3:在numberOfRowsInSection中返回的时候使用三木判断是否点击,并且实现伸缩与展开,

1 return model.open?model.friends.cout:0;

这里完成之后运行程序点一下试试,你会发现。。。。。。。。。。。。。。。。。什么效果也没有。

当然会没有效果,因为我们没有传值,后面才是本章的重点,学会了这里以后关于通知,代理。Block的使用基本上没有问题。

/************************************************代理*************************************************/

方法一:代理

1:在对应的View中创建一个协议

 1 @class iCocosView
 2
 3
 4
 5 @protocol iCocoDelegate <NSObject>
 6
 7 @optional
 8
 9 -(void)headerView:(iCocosView *)view;
10
11
12
13 @end

2:创建一个代理属性

1 @property (nonatomic, assign) id<iCocoDelegate> delegate;

3:在这个实现文件中判断有没有实现这个代理方法

1 if([self.delegate repondToSelector:selector(headerView)]) {
2
3 [self.delegate headerView];
4
5 }

4:先在对应的控制器遵守这个协议,并且设置代理

1 <iCocosDelegate>

  • header.delegate = self; //让控制器充当代理

5:实现代理方法

1 -(void)headerView:(iCocosView *)view { 2 3 [self.tableView reloadData]; 4 5 }

/************************************************Block*************************************************/

方法二:Block

1:定义一个Block

1 typedef void (^iCocosBlock)(id);

2:创建一个Block对应的属性(使用Copy)

1 @property (nonatomic, weak)iCocosBlock block; 2 3

3:实现文件中判读

1 if(self.block) { 2 3 self.block(self); 4 5 }

4:在控制器中实现

1 header.block = ^(id sender) {  //sender是传过来的参数
2
3 [self.tableView reloadData];
4
5 };

/************************************************通知*************************************************/

方法三:通知

1:在控制器中注册一个通知

1 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notiClick) name:@“friends” object:nil]; 2 3

2:实现通知方法

1 -(void)notiClick
2
3 {
4
5 [self.tableView reloadData];
6
7 }

3:同样在实现文件中发布一个通知

1 [[NSNotificationCenter defaultCenter]postNotificationName: @“friends”object:self userInfo:nil]; 2 3

4:移除通知:我们可以在两个方法里面一出通知:ViewDidDidApper和Dealloc

并且使用良种两种方法

@1:移除所有通知

1 [[NSNotificationCenter defaultCenter] removeObserver:self];

@2:根据名字移除通知

1 [[NSNotificationCenter defaultCenter]removeObserver:self name:@“friedns” object:nil];

这里需要注意:实际开发中使用完通知之后一定要移除通知,否则如果里面通知太多,当你再次发送一个通知的时候程序就不知道去找那个通知甚至会导致程序奔溃。

/************************************************运行结果*************************************************/

使用上面任何一种方法都可以实现同样的功能,点击每一行的组的时候就会展开相应行并且显示对应组的所有行。

但是具体使用说明视情况而定:

总结:。。。。。。。。待续

时间: 2024-12-22 08:42:23

iOS开发——UI篇&代理/通知/Block传值(实现UItableView分组的收缩与展开)的相关文章

学习IOS开发UI篇--NSNotificationCenter通知中心

NSNotificationCenter 较之于 Delegate 可以实现更大的跨度的通信机制,可以为两个无引用关系的两个对象进行通信.NSNotificationCenter 的通信原理使用了观察者模式; 1. NSNotificationCenter 注册观察者对某个事件(以字符串命名)感兴趣,及该事件触发时该执行的 Selector 或 Block 2. NSNotificationCenter 在某个时机激发事件(以字符串命名) 3. 观察者在收到感兴趣的事件时,执行相应的 Selec

iOS开发UI篇—实现一个私人通讯录小应用(二)

iOS开发UI篇—实现一个私人通讯录小应用(二) 一.实现功能说明 (1)点击注销按钮,弹出一个对话框,点击确定后移除当前栈顶的控制器,返回开始界面,点击取消,不做任何操作. 注意:注销按钮的单击事件已经进行了连线.实现-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex需要遵守UIActionSheetDelegate协议. 1 //注销按钮 2 - (IBActi

iOS开发UI篇—核心动画(UIView封装动画)(转摘)

iOS开发UI篇—核心动画(UIView封装动画) 一.UIView动画(首尾) 1.简单说明 UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画支持 执行动画所需要的工作由UIView类自动完成,但仍要在希望执行动画时通知视图,为此需要将改变属性的代码放在[UIViewbeginAnimations:nil context:nil]和[UIView commitAnimations]之间 常见方法解析: + (void)setAnimati

iOS开发UI篇—UITableview控件使用小结

iOS开发UI篇—UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; 2.告诉每组一共有多少行 方法:- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSIntege

iOS开发UI篇-UIWindow简单介绍

iOS开发UI篇—UIWindow简单介绍 一.简单介绍 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了 一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow.也就说,没有UIWindow,就看不见任何UI界面 补充:UIWindow是创建的第一个视图控件(创建的第一个

iOS开发UI篇—自定义瀑布流控件(蘑菇街数据刷新操作)

iOS开发UI篇—自定义瀑布流控件(蘑菇街数据刷新操作) 一.简单说明 使用数据刷新框架: 该框架提供了两种刷新的方法,一个是使用block回调(存在循环引用问题,_ _weak),一个是使用调用. 问题:在进行下拉刷新之前,应该要清空之前的所有数据(在刷新数据这个方法中). 移除正在显示的cell: (1)把字典中的所有的值,都从屏幕上移除 (2)清除字典中的所有元素 (3)清除cell的frame,每个位置的cell的frame都要重新计算 (4)清除可复用的缓存池. 该部分的代码如下: 1

iOS开发UI篇—程序启动原理和UIApplication

iOS开发UI篇-程序启动原理和UIApplication 一.UIApplication 1.简单介绍 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序. (2)每一个应用都有自己的UIApplication对象,而且是单例的,如果试图在程序中新建一个UIApplication对象,那么将报错提示. (3)通过[UIApplicationsharedApplication]可以获得这个单例对象 (4) 一个iOS程序启动后创建的第一个对

iOS开发UI篇—UIWindow简单介绍

iOS开发UI篇—UIWindow简单介绍 - 文顶顶 - 博客园 文顶顶 iOS开发UI篇—UIWindow简单介绍 iOS开发UI篇—UIWindow简单介绍 一.简单介绍 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了 一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWi

学习IOS开发UI篇--UIScrollView/delegate/pagecontrol/UITimer

1.UIscrollView的属性 ================================================== 1.1 常见属性 @property(nonatomic) CGPoint contentOffset; 这个属性用来表示UIScrollView滚动的位置 @property(nonatomic) CGSize contentSize; 这个属性用来表示UIScrollView内容的尺寸,滚动范围(能滚多远) @property(nonatomic) UIE