2015.5.23

UITableView 的数据源刷新问题

本次发过来的版本五,实现了活动清单列表(AllEventsTableViewController)、活动详情(AllEventsViewController)、今日待办列表(TodayEventTableViewController)

执行时发现:活动清单列表 - 点击+ - 填好标题和细节 - 点击Save

回到清单列表时没有新增的一条活动,直到重新run,才显示数据

在numberOfRowsInSection和cellForRowAtIndexPath加断点,发现点击Save后没有走到这两个方法

原因是:viewWillAppear没有重现加载数据,加上下面操作后

// 刷新Table的数据
[self.tableView reloadData];

今日代办列表也有同样问题


2015.5.24

core data 排序问题

从今日代办切换到活动清单,列表顺序会变化;添加了一个活动后返回活动清单,列表顺序也会变化;

只有重新run一次,才是按顺序;

解决的方法是在viewWillAppear中加入如下代码:

// 按照contents字段排序
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"contents" ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:sort]];

其实更好的处理办法是,增加一个任务添加时间eventAddTime属性,按照这个属性排序;


2015.5.24

点击今日代办列表的一栏,跳转到当下清单页,发现显示的一直是第一例

排查发现,是获取indexPath的方法有问题

// 旧的
TodayEventTableViewCell* cell=(TodayEventTableViewCell*)[sender superview];
// 新的
TodayEventTableViewCell* cell=(TodayEventTableViewCell*)sender;

上面这行代码是从网上copy的,是点击cell的一个button时,用的代码;

但是目前是点击整个区域调转,此时


2015.6.1

错误:Incompatible integer to pointer conversion assigning to 'NSUInteger *' (aka 'unsigned long *') from 'int'

原因:定义非负整形时,应该用 NSUInteger,而不是 NSUInteger *

问题:从tableView点击某个cell,跳到cell的页面,如何使底部的tabbar隐藏?

方法:

toDoVC.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:toDoVC animated:NO];

2015.6.6

问:如何修改tabbar上各tabbaritem的文字和图标

答:

如果是代码实现

tabBarItem = [[UITabBarItem alloc] initWithTitle:title image:image selectedImage:selectedImage];

如果是storyboard

选中storyboard中的tabbaritem,然后在Attribute Inspecter里修改title和image

问:如何设置夜景模式

答:网上查到的夜间模式,比较复杂,需要准备两套图片素材

我这边打算先实现简单的,用一个UISwitch控制,夜间模式降背景颜色设置为灰色

对于设置页,可以直接用目标-动作(target-action)来实现

但是如果同时改变其他页面的背景颜色,则需要用通知-委托(notification-delegate)实现

另外,夜间模式也可以通过调节亮度实现:

UIScreen *mainScreen = [UIScreen mainScreen];
if (switchButton.on) {
self.view.backgroundColor = [UIColor grayColor];
mainScreen.brightness = ;
} else {
self.view.backgroundColor = [UIColor whiteColor];
mainScreen.brightness = 0.5;
}

2015.6.7

为了实现水纹效果,从网上找了个demo:RippleTableViewController

原来的cell是用storyboard实现的,转移按钮是直接拖过去的

现在要用代码实现转移按钮,所以需要自定义 AllEventsTableViewCell

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
UIButton *transButton = [[UIButton alloc] initWithFrame:CGRectMake(, , , )];
[transButton setTitle:@"转移" forState:UIControlStateNormal];
[transButton setBackgroundColor:[UIColor blueColor]]; [self.contentView addSubview:transButton];
[transButton addTarget:self action:@selector(transAction:) forControlEvents:UIControlEventTouchUpInside]; self.button = transButton; return self;
} - (IBAction)transAction:(id)sender {
if (self.actionBlock) {
self.actionBlock();
}
}

几点说明下:

1、添加button的操作,放在UITableViewCell的指定初始化方法中;

2、transButton要添加到cell的contentView属性中,对应的

AllEventsTableViewCell *cell =(AllEventsTableViewCell*)[sender.superview superview];

sender就是button,sender.superview就是contentView,[sender.superview superview]就是cell;

3、forControlEvents:UIControlEventTouchUpInside

注意event要选对,一开始没注意,选了UIControlEventAllTouchEvents,导致每次点击会触发两次action(每次touch,会有手指点下和抬起两次event)

4、要想cell里面button的点击向ViewController传递消息,需要用到block

__weak AllEventsTableViewCell *weakCell = cell;
cell.actionBlock = ^{
AllEventsTableViewCell *strongCell = weakCell;
[self eventMoveToTodayEvents:strongCell.button];
};

这里涉及到block、retain cycle、weak、strong等概念,暂时还不是太清楚,看下斯坦福第8集视频;

换一种写法也可以:

// cell初始化时,加上__block
__block AllEventsTableViewCell *cell = [[AllEventsTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"AllEventsTableViewCell"];
// 其他对cell的操作
// ...
cell.actionBlock = ^{
[self eventMoveToTodayEvents:cell.button];
cell = nil;
};

注意:加上__block后,变量在块中保存的不在是变量的值,而是变量的地址,所以可以被修改;

斯坦福第8集介绍__block讲到,如果加上这个修饰,此变量会从栈移到堆中,从而可以在block中使用,等block结束,再将信息复制回堆,再放回到栈上;

栈 - 复制到堆 - block中改变其值 - 将值复制到堆 - 再放回到栈

每次向block中的对象发送消息时,系统都会创建一个指向该对象的强指针,直至block不存在

这里要加上 cell = nil,否则会提示可能引入retain cycle

iOS中的block和retain cycle

http://www.cnblogs.com/tangbinblog/archive/2012/12/31/2840690.html

这篇博客讲得还不错

Pomodoro APP的更多相关文章

  1. WatchKit App Submission Issues

    查看原文: http://leancodingnow.com/watchkit-app-submission-issues/ I submitted a new version of my app P ...

  2. 番茄钟App(Pomodoro Tracker)

    最近为了学习Swift编程语言,写了一个番茄钟的App(Pomodoro Tracker).刚上线的1.2版本增加了Apple Watch的支持. iPhone版 Apple Watch版 如果你跟我 ...

  3. App Submission Issues

    查看原文: http://leancodingnow.com/app-submission-issues/ I bet many iOS developers are busy submitting ...

  4. iOS-----GitHub上比较齐全的iOS 工具和App

    Github-iOS 工具 和 App   系统基础库 Category/Util sstoolkit 一套Category类型的库,附带很多自定义控件 功能不错-       BFKit 又一套Ca ...

  5. App开发:模拟服务器数据接口 - MockApi

    为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...

  6. Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记

    以前用Eclicps 用习惯了现在 想学学 用Android Studio 两天的钻研终于 在我电脑上装了一个Android Studio 并完成了AndroidAnnotations 的配置. An ...

  7. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  8. 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付

    前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...

  9. SQLSERVER走起 APP隆重推出

    SQLSERVER走起 APP隆重推出 为方便大家查看本微信公众以前推送的文章,QQ群里面的某位SQLSERVER重度爱好者开发了<SQLSERVER走起>的APP 以供大家一起交流 网页 ...

随机推荐

  1. java读取properties文件的配置信息

    项目开发中,我们一般来向 application.properties 文件中放一些全局配置变量,以便程序中读取使用,本篇内容来演示从properties配置文件中读取键值. 当然,我们不一定写入 a ...

  2. OPENGL2_基本框架

    一些概念 HDC:设备描述句柄(窗口着色描述表句柄),是WINDOWS的一种数据类型,HDC定义的变量指向一块内存,这块内存用来描述一个设备的相关的内容(设备描述表). HGLRC:OpenGL渲染环 ...

  3. 【渗透测试】如何使用burpsuite对特殊密码进行爆破

    爆破是渗透测试中必不可少的一部分,对于没有太大价值可利用的漏洞或是业务只有一个登陆页面时,爆破更是我们的最合适的选择.那么在爆破时,抛去目标系统对爆破频率的限制,如果遇到较为复杂的密码,该如何顺利进行 ...

  4. 集合:set

    set 就是数学上的集合——每个元素最多只出现一次.和sort一样,自定义一个类型也可以构造set ,但是必须定义“小于”运算符. 例子: 输入一个文本,找出所有不同的单词(连续的字母序列),按字典从 ...

  5. python __new__ __init__ 区别

    参数 __new__的第一个占位参数是class对象 __init__的第一个占位参数是class的实例对象 其他的参数应一致 作用 __new__ 用来创建实例,在返回的实例上执行__init__, ...

  6. 使用express+mongoDB搭建多人博客 学习(5)权限控制

    修改index.js如下: var express = require('express'); var router = express.Router(); var crypto=require('c ...

  7. hdu3487Play with Chain(splay)

    链接 简单的两种操作,一种删除某段区间,加在第I个点的后面,另一个是翻转区间.都是splay的简单操作. 悲剧一:pushdown时候忘记让lz=0 悲剧二:删除区间,加在某点之后的时候忘记修改其父亲 ...

  8. C#oracle备份和还原

    最近公司的oracle备份工具不好使了,原来是公司的人用VB写的,由于我是主攻C#的,所以想着自己来写一个C#版本的oracle备份和还原工具. 一开始,我按照原来的设计思路来进行编写,想在pluss ...

  9. 日常博客-png,jpeg,gif图片

    个人博客记录:2017-11-09 png-----32位无损压缩算法形成的图片,主要用于logo小图标和一些点缀的小图像.放大缩小不会失真,质量好 jpeg,jpg-----压缩比例较高(可达到10 ...

  10. m_pConnection.CreateInstance( "ADODB.Connection ") 执行错误 结果总是为NULL

    今天下午搞了下项目 数据库操作模块,总是出现m_pConnection.CreateInstance( "ADODB.Connection ") 执行错误,即m_pConnecti ...