UITableView设置界面完整封装(三)

简单MVC实现UITableView设置界面之界面跳转

创建一个需要调整的对应的控制器

在需要调整的类型模型中创建对应的属性用来实现调整类型控制器的设置

// 保存一个跳转的控制器类名,1.字符串 2.Class


/** 目的控制器的类名 Class:一般用assign */

@property (nonatomic, assign) Class descVc;

判断类型进行调整:

#pragma mark - 监听cell点击

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

 {

     // 取出模型

     iCocosGroupItem *group = self.groups[indexPath.section];

     iCocosSettingItem *item = group.items[indexPath.row];

     if ([item isKindOfClass:[iCocosSettingArrowItem class]]) {

         iCocosSettingArrowItem *arrowItem = (iCocosSettingArrowItem *)item;

         if (arrowItem.descVc) {

             // 创建目的控制器

             UIViewController *vc = [[arrowItem.descVc alloc] init];

             vc.navigationItem.title = item.title;

             // 跳转界面

             [self.navigationController pushViewController:vc animated:YES];

         }

     }

 }

设置调整的类型:在

    // 设置目的控制器的类名

    push.descVc = [iCocosPushViewController class];

最后点击对应能够实现调整的Cell酒会调整到对应的控制器

跳转后的界面

由于点击对应的行可能实现不同的功能或者不需要任何提示

所以这里需要判断一下点击对应的行是否要做相应的事情或者跳转到对应的界面

所以这里使用Blobk传值,关于其他方式传值请查看笔者之前总结的文章:

http://www.cnblogs.com/iCocos/p/4550169.html

http://www.cnblogs.com/iCocos/p/4659878.html

在Cell模型中定义一个block,用来实现操作

/** 保存点击cell做的事情 */

@property (nonatomic, strong) void(^operationBlock)();

在点击的cell方法中判断是否使用Block去传值:


     // 判断下有木有事情,就判断下block有没有值

     if (item.operationBlock) {

         // 执行保存的代码

         item.operationBlock();

         return;

     } 

在创建对应Cell之后使用block实现传值:

其它操作:弹出提示框

此时就会实现响应的现实

跳转控制器;

这里需要注意,由于我们使用的Block传值,所以在

[self.navigationController pushViewController:vc animated:YES];

会导致Block循环引用,我需要实现__weak来防止循环引用(前面的知识,请查看相关资料)

使用block的注意点,尽量避免循环引用

block会把代码块里面的所有强指针强引用

  • 会把当前控制器的对象强引用
  • 解决循环引用,用weak

把self强指针转换为弱指针

typeof(x) 获取x的类型 XMGSettingViewController *

     __weak typeof(self) weakSelf = self;

     // 在block中最好不要直接访问成员属性

     RedeemCode.operationBlock = ^{

         UIViewController *vc = [[UIViewController alloc] init];

         vc.view.backgroundColor = [UIColor redColor];

         vc.title = @"asldjasd";

         [weakSelf.navigationController pushViewController:vc animated:YES];

         // self -> _groups

         NSLog(@"%@",weakSelf.groups);

     };

iOS开发——开发必备OC篇&UITableView设置界面完整封装(三)的更多相关文章

  1. iOS开发——开发必备OC篇&UITableView设置界面完整封装(二)

    UITableView设置界面完整封装(二) 简单MVC实现UITableView设置界面之Cell右边类型设置 首先来看看第一种方法证明使用,结合两种方法之后根据个人的爱好去选择就可以了, 一:使用 ...

  2. iOS开发——开发必备OC篇&UITableView设置界面完整封装(一)

    UITableView设置界面完整封装(一) 简单MVC实现UITableView设置界面分组数据显示 一:模型 1:cell模型 /** 描述cell图片 */ @property (nonatom ...

  3. iOS开发——开发必备OC篇&UITableView设置界面完整封装(四)

    设置界面完整封装(四) 简单MVC实现UITableView设置界面完善封装及拓展使用 关于使用和拓展, 其实基本上就是同UItableView,知识讲数据改一下就可以 拓展使用 1:首先定义一个数组 ...

  4. ios开发——实用技术篇OC篇&iOS的主要框架

    iOS的主要框架         阅读目录 Foundation框架为所有的应用程序提供基本系统服务 UIKit框架提供创建基于触摸用户界面的类 Core Data框架管着理应用程序数据模型 Core ...

  5. iOS应用 跳转到系统的设置界面

    现在很多APP都需要获取用户权限,例如,允许调用位置信息,读取短信,拨打电话,开启WIFI,掉头摄像头等,用户不允许APP获取这些权限的时候.最好的用户体验是,直接跳转到系统设置界面,让用户自己设置. ...

  6. iOS开发——UI篇OC篇&UITableView简单封装

    UITableView简单封装 UITableView时iOS开发中使用最多也是最重的一个UI空间,其实在App Store里面的%80以上的应用都用到了这个控件,所以就给大家介绍一下,前面的文章中也 ...

  7. iOS开发——开发必备OC篇&彩票实战之精华讲解

    彩票实战之精华讲解 在这段时间自己研究并学习关于彩票项目开发的时候遇到各种坑,各种技术点以前或许之前用过但是却用起来不是那么熟悉,所以没遇到一个重点的地方我就会记录一下,希望不会再有下次. 本文主要讲 ...

  8. iOS开发——UI篇OC篇&UITableView多项选择

    UITableView多项选择 自定义cell和取到相应的cell就行了 TableViewCell.h #import <UIKit/UIKit.h> @interface TableV ...

  9. iOS开发——网络实用技术OC篇&网络爬虫-使用青花瓷抓取网络数据

    网络爬虫-使用青花瓷抓取网络数据 由于最近在研究网络爬虫相关技术,刚好看到一篇的的搬了过来! 望谅解..... 写本文的契机主要是前段时间有次用青花瓷抓包有一步忘了,在网上查了半天也没找到写的完整的教 ...

随机推荐

  1. Lucene 入门需要了解的东西

    全文搜索引擎的原理网上大段的内容,要想深入的学习,最好的办法就是先用一下,lucene 发展比较快,下面是写第一个demo  要注意的一些事情: 1.Lucene的核心jar包,下面几个包分别位于不同 ...

  2. spring依赖注入方法

    依赖注入就是在程序运行时期,由外部容器动态的将依赖对象注入到组件中,通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给sprin ...

  3. RPC基础篇

    RPC概念 RPC(Remote Procedure Call Protocol)——远程过程调用协议, 是一种进程间通信方式.它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数 ...

  4. MyEclipse10导入工程jsp报错问题

    好多时候,再用myecplise进行项目开发的时候,遇到导入工程的时候,工程内的jsp页面好多都报错.这是什么原因造成的呢?​ 我对于我遇到的问题及解决方法,跟大家分享一下.​ 我的Jsp页面报错的原 ...

  5. MyEclipse2015对Javascript自动提示的终极支持

    2015通过集成Tern.js,进入了JS自动提示的最新时代 先看看具体效果吧:   点击链接会进入:   而tern.js已经支持相当多的框架:   关键这个提示不只是纯粹的js文件,对于jsp等等 ...

  6. rm 注意

    软连接ln -s lnfile file rm -rf lnfile只是删除lnfile ln -s lndir dir rm -rf lndir 删除链接 rm -rf lndir/删除目录下文件

  7. Hadoop学习笔记1---简介 优点 架构分析

    一.Hadoop简介 Hadoop最早起源于Nutch.Nutch是一个开源的网络搜索引擎,由Doug Cutting于2002年创建.Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取. ...

  8. 调试Python代码的工具

    pdb: 首先来说Python里内建的调试器,pdb.它利用一个简单的命令行界面,还有很多你在用调试器时用得上的功能.帮助系统能为你指出你能运行的命令,比如单步调试代码,操纵调用栈和设置断点. 一些它 ...

  9. c++面试题总结(1)

    1.int a=5,则 ++(a++)的值是() A.5      B.   6          C.7       D.逻辑错误 a++返回的是一个临时变量,这里是右值,不能再前面++了 2.下面 ...

  10. hdu 4815 Little Tiger vs. Deep Monkey(01背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=4815 Description A crowd of little animals is visiting a m ...