public class ActivityContrl { private static List<Activity> activityList = new ArrayList<Activity>(); public static void remove(Activity activity) { activityList.remove(activity); } public static void add(Activity activity) { activityList.add(activity); } public static void finishProgram() { for (Activity activity : activityList) { if (null != activity) { activity.finish(); } } android.os.Process.killProcess(android.os.Process.myPid()); } } 在每个activity的onCreate中都添加 自己到activityList 中
UITableView的强大更多程度上来自于可以任意自定义UITableViewCell单元格。
通常,UITableView中的Cell是 动态的,在使用过程中,会创建一个Cell池,根据每个cell的高度(即tableView:heightForRowAtIndexPath:返回 值),以及屏幕高度计算屏幕中可显示几个cell。而进行自定义TableViewCell无非是采用代码实现或采用IB编辑nib文件来实现两种方式, 本文主要收集代码的方式实现各种cell自定义。
如何动态调整Cell高度
如何用图片自定义Table Separeator分割线
一般地,利用类似[tableView setSeparatorColor:[UIColor redColor]];语句即可修改cell中间分割线的颜色。那又如何用一个图片作为分割线背景呢?可以尝试如下:
方法一:
先设置cell separatorColor为clear,然后把图片做的分割线添加到自定义的custom cell上。
方法二:
在cell里添加一个像素的imageView后将图片载入进,之后设置tableView.separatorStyle = UITableViewCellSeparatorStyleNone
自定义首行Cell与其上面导航栏间距
[cpp] view plaincopytableView.tableHeaderView = [[[UIView alloc] initWithFrame:CGRectMake(0,0,5,20)] autorelease];
自定义UITableViewCell的accessory样式
默认的accessoryType属性有四种取值:UITableViewCellAccessoryNone、 UITableViewCellAccessoryDisclosureIndicator、 UITableViewCellAccessoryDetailDisclosureButton、 UITableViewCellAccessoryCheckmark。
如果想使用自定义附件按钮的其他样式,则需使用UITableView的accessoryView属性来指定。
以上代码仅仅是定义了附件按钮两种状态下的样式,问题是现在这个自定义附件按钮的事件仍不可用。
即事件还无法传递到 UITableViewDelegate的accessoryButtonTappedForRowWithIndexPath方法上。
当我们在上述代码 中在加入以下语句:
[button addTarget:self action:@selector(btnClicked:event:) forControlEvents:UIControlEventTouchUpInside];
后, 虽然可以捕捉到每个附件按钮的点击事件,但我们还无法进行区别到底是哪一行的附件按钮发生了点击动作!因为addTarget:方法最多允许传递两个参 数:target和event,这两个参数都有各自的用途了(target指向事件委托对象,event指向所发生的事件)。看来只依靠Cocoa框架已 经无法做到了。
但我们还是可以利用event参数,在自定义的btnClicked方法中判断出事件发生在UITableView的哪一个cell上。因为UITableView有一个很关键的方法indexPathForRowAtPoint,可以根据触摸发生的位置,返回触摸发生在哪一个cell的indexPath。而且通过event对象,正好也可以获得每个触摸在视图中的位置。
这样,UITableView的accessoryButtonTappedForRowWithIndexPath方法会被触发,并且获得一个indexPath参数。通过这个indexPath参数,我们即可区分到底哪一行的附件按钮发生了触摸事件。
cell设置背景图片。
UIImageView *bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"home.png"]];
cell.backgroundView = bgImageView;
[bgImageView release];
cell设置选中图片
UIImageView *ivSelected = [[UIImageView alloc] initWithImage:kSelectedTableCellImage];
cell.selectedBackgroundView = ivSelected;
[ivSelected release];
-、建立 UITableView
附件件中有图文说明;
相关配置项解释来自:xcode4的环境变量,Build Settings参数,workspace及联编设置 相关配置方法来自:http://chepri.com/ios/visual-guide-manually-adding-three20-xcode-4-project/
1)在XCode项目中建一个group named "three20",右键add file....,找到Three20项目文件,不要选copy, 选择 create group,最后不要忘了选择下面的两个target(开发和测试的,或其它需要引用three20的target)
2)在刚add到XCode项目中的Three20下找到dependency,把下面的所有项目也拖到three20 group中,不要选 copy, 选择create group,最后不要忘了选择下面的两个target;
3)现在在three20 group下面应该有7个项目文件了,如果还需要引入除了在Three20 dependency下以外的 Three20相关项目(如:JSON解析等,注意:不要把JSON和YAML解析的项目都引入,这样在编译时会报 Duplicated symbol错误),则按第1)步即可以(一定不要直接拖拽,这样就没有机会选target了)
4)选择开发项目下的target,在build phase的link binary with Libraries下add work space下的和three20相关的.a文 件;再到Target Dependencies下面add与three20相关的boundle;
5)切换到当前target的build settings下,找到header search path进行配置(注意three20项目与当前工程项目处在同
一目录下,是平级的),如果有Debug项,那么配置和Release一样即可,如下:
AdHoc:
Distribution:
Release:
6)再找到Other Linker Flags并配置,如下:
7)找到Per-configuration Build Products Path并配置(如果有Debug项,那么配置和Release一样即可),如下:
8)用于测试的target的配置过程,同上;但注意:应该先创建OCUnit target,再通过上面的方式引入Three20,而 且引入Three20时,一定不要忘记把测试target勾上; 另外,在配置测试target时,网上有人说要把用到的类拖到Build Phase下Copile Sources里,但实践证明不用那 样,拖进去后反而会编译错误;