当前位置:  编程技术>移动开发
本页文章导读:
    ▪治理activity 彻底关闭应用        管理activity 彻底关闭应用 public class ActivityContrl { private static List<Activity> activityList = new ArrayList<Activity>(); public static void remove(Activity activity) { activityList.remove(activity); } public stati.........
    ▪ UITableView自定义个人化        UITableView自定义个性化 UITableView的强大更多程度上来自于可以任意自定义UITableViewCell单元格。 通常,UITableView中的Cell是 动态的,在使用过程中,会创建一个Cell池,根据每个cell的高度(即t.........
    ▪ Three20配备(针对XCode4开发和测试target)       Three20配置(针对XCode4开发和测试target) 附件件中有图文说明; 相关配置项解释来自:xcode4的环境变量,Build Settings参数,workspace及联编设置 相关配置方法来自:http://chepri.com/ios/visual-guide-manual.........

[1]治理activity 彻底关闭应用
    来源: 互联网  发布时间: 2014-02-18
管理activity 彻底关闭应用

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 中


    
[2] UITableView自定义个人化
    来源: 互联网  发布时间: 2014-02-18
UITableView自定义个性化

UITableView的强大更多程度上来自于可以任意自定义UITableViewCell单元格。

通常,UITableView中的Cell是 动态的,在使用过程中,会创建一个Cell池,根据每个cell的高度(即tableView:heightForRowAtIndexPath:返回 值),以及屏幕高度计算屏幕中可显示几个cell。而进行自定义TableViewCell无非是采用代码实现或采用IB编辑nib文件来实现两种方式, 本文主要收集代码的方式实现各种cell自定义。

如何动态调整Cell高度

[cpp] view plaincopy
  • - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {  
  •    
  •     static NSString *CellIdentifier = @"Cell";  
  •    
  •     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];  
  •     if (cell == nil) {  
  •         cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];  
  •         UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];  
  •         label.tag = 1;  
  •         label.lineBreakMode = UILineBreakModeWordWrap;  
  •         label.highlightedTextColor = [UIColor whiteColor];  
  •         label.numberOfLines = 0;  
  •         label.opaque = NO; // 选中Opaque表示视图后面的任何内容都不应该绘制  
  •         label.backgroundColor = [UIColor clearColor];  
  •         [cell.contentView addSubview:label];  
  •         [label release];  
  •     }  
  •    
  •     UILabel *label = (UILabel *)[cell viewWithTag:1];  
  •     NSString *text;  
  •     text = [textArray objectAtIndex:indexPath.row];  
  •     CGRect cellFrame = [cell frame];  
  •     cellFrame.origin = CGPointMake(0, 0);  
  •    
  •     label.text = text;  
  •     CGRect rect = CGRectInset(cellFrame, 2, 2);  
  •     label.frame = rect;  
  •     [label sizeToFit];  
  •     if (label.frame.size.height > 46) {  
  •         cellFrame.size.height = 50 + label.frame.size.height - 46;  
  •     }  
  •     else {  
  •         cellFrame.size.height = 50;  
  •     }  
  •     [cell setFrame:cellFrame];  
  •    
  •     return cell;  
  • }  
  •   
  • - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath  
  • {  
  •     UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];  
  •     return cell.frame.size.height;  
  • }  
  • 如何用图片自定义Table Separeator分割线
    一般地,利用类似[tableView setSeparatorColor:[UIColor redColor]];语句即可修改cell中间分割线的颜色。那又如何用一个图片作为分割线背景呢?可以尝试如下:
    方法一:
    先设置cell separatorColor为clear,然后把图片做的分割线添加到自定义的custom cell上。

    方法二:
    在cell里添加一个像素的imageView后将图片载入进,之后设置tableView.separatorStyle = UITableViewCellSeparatorStyleNone

    自定义首行Cell与其上面导航栏间距

    [cpp] view plaincopy
  • tableView.tableHeaderView = [[[UIView alloc] initWithFrame:CGRectMake(0,0,5,20)] autorelease];  
  • 自定义UITableViewCell的accessory样式
          默认的accessoryType属性有四种取值:UITableViewCellAccessoryNone、 UITableViewCellAccessoryDisclosureIndicator、 UITableViewCellAccessoryDetailDisclosureButton、 UITableViewCellAccessoryCheckmark。

    如果想使用自定义附件按钮的其他样式,则需使用UITableView的accessoryView属性来指定。

    [cpp] view plaincopy
  • UIButton *button;  
  • if(isEditableOrNot) {  
  •     UIImage *image = [UIImage imageNamed:@"delete.png"];  
  •     button = [UIButton buttonWithType:UIButtonTypeCustom];  
  •     CGRect frame = CGRectMake(0.0,0.0,image.size.width,image.size.height);  
  •     button.frame = frame;  
  •     [button setBackgroundImage:image forState:UIControlStateNormal];  
  •     button.backgroundColor = [UIColor clearColor];  
  •     cell.accessoryView = button;  
  • }else{  
  •     button = [UIButton buttonWithType:UIButtonTypeCustom];  
  •     button.backgroundColor = [UIColor clearColor];  
  •     cell.accessoryView = button;  
  • }  
  • 以上代码仅仅是定义了附件按钮两种状态下的样式,问题是现在这个自定义附件按钮的事件仍不可用。

    即事件还无法传递到 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对象,正好也可以获得每个触摸在视图中的位置。

     

    [cpp] view plaincopy
  • // 检查用户点击按钮时的位置,并转发事件到对应的accessory tapped事件  
  • - (void)btnClicked:(id)sender event:(id)event  
  • {  
  •      NSSet *touches = [event allTouches];  
  •      UITouch *touch = [touches anyObject];  
  •      CGPoint currentTouchPosition = [touch locationInView:self.tableView];  
  •      NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:currentTouchPosition];  
  •      if(indexPath != nil)  
  •      {  
  •          [self tableView:self.tableView accessoryButtonTappedForRowWithIndexPath:indexPath];  
  •      }  
  • }  
  •  

    这样,UITableView的accessoryButtonTappedForRowWithIndexPath方法会被触发,并且获得一个indexPath参数。通过这个indexPath参数,我们即可区分到底哪一行的附件按钮发生了触摸事件。

    [cpp] view plaincopy
  • - (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath  
  • {  
  •     int  *idx = indexPath.row;  
  •    //这里加入自己的逻辑  
  • }  
  • 分享到: 

    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

     DataTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)];
     [DataTable setDelegate:self];
     [DataTable setDataSource:self];
     [self.view addSubview:DataTable];
     [DataTable release];
     
    二、UITableView各Method说明
     
    //Section总数
    - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{
     return TitleData;
    }
     
    // Section Titles
    //每个section显示的标题
    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
     return @"";
    }
     
    //指定有多少个分区(Section),默认为1
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
     return 4;
    }
     
    //指定每个分区中有多少行,默认为1
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    }
     
    //绘制Cell
    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
      
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
                                 SimpleTableIdentifier];
        if (cell == nil) {  
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                           reuseIdentifier: SimpleTableIdentifier] autorelease];
     }
     cell.imageView.image=image;//未选cell时的图片
     cell.imageView.highlightedImage=highlightImage;//选中cell后的图片
     cell.text=//.....
     return cell;
    }
     
    //行缩进
    -(NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath{
     NSUInteger row = [indexPath row];
     return row;
    }
     
    //改变行的高度
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
        return 40;
    }
     
    //定位
    [TopicsTable setContentOffset:CGPointMake(0, promiseNum * 44 + Chapter * 20)];
     
    //返回当前所选cell
    NSIndexPath *ip = [NSIndexPath indexPathForRow:row inSection:section];
    [TopicsTable selectRowAtIndexPath:ip animated:YES scrollPosition:UITableViewScrollPositionNone];
     
    [tableView setSeparatorStyle:UITableViewCellSelectionStyleNone];
     
    //选中Cell响应事件
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
     [tableView deselectRowAtIndexPath:indexPath animated:YES];//选中后的反显颜色即刻消失
    }
     
    //判断选中的行(阻止选中第一行)
    -(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSUInteger row = [indexPath row];
        if (row == 0)
            return nil;
       
        return indexPath;
    }
     
    //划动cell是否出现del按钮
    - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    }
     
    //编辑状态
    - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
    forRowAtIndexPath:(NSIndexPath *)indexPath
    {
    [topicsTable setContentSize:CGSizeMake(0,controller.promiseNum * 44)];
    //右侧添加一个索引表
    - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{
    }
    //返回Section标题内容
    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    }
    //自定义划动时del按钮内容
    - (NSString *)tableView:(UITableView *)tableView
    titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
    //跳到指的row or section
    [tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:NO];
    三、在UITableViewCell上建立UILable多行显示
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        static NSString *CellIdentifier = @"Cell";   
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
      UILabel *Datalabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 320, 44)];
      [Datalabel setTag:100];
      Datalabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
      [cell.contentView addSubview:Datalabel];
      [Datalabel release];
     } 
     UILabel *Datalabel = (UILabel *)[cell.contentView viewWithTag:100];
     [Datalabel setFont:[UIFont boldSystemFontOfSize:18]];
     Datalabel.text = [data.DataArray objectAtIndex:indexPath.row];
     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        return cell;
    }
    //选中cell时的颜色
    typedef enum {
        UITableViewCellSelectionStyleNone,
        UITableViewCellSelectionStyleBlue,
        UITableViewCellSelectionStyleGray
    } UITableViewCellSelectionStyle 
    //cell右边按钮格式
    typedef enum {
        UITableViewCellAccessoryNone,                   // don't show any accessory view
        UITableViewCellAccessoryDisclosureIndicator,    // regular chevron. doesn't track
        UITableViewCellAccessoryDetailDisclosureButton, // blue button w/ chevron. tracks
        UITableViewCellAccessoryCheckmark               // checkmark. doesn't track
    } UITableViewCellAccessoryType
    //是否加换行线
    typedef enum {
        UITableViewCellSeparatorStyleNone,
        UITableViewCellSeparatorStyleSingleLine
    } UITableViewCellSeparatorStyle//改变换行线颜色
    tableView.separatorColor = [UIColor blueColor];

     


        
    [3] Three20配备(针对XCode4开发和测试target)
        来源: 互联网  发布时间: 2014-02-18
    Three20配置(针对XCode4开发和测试target)

    附件件中有图文说明;

    相关配置项解释来自: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里,但实践证明不用那 样,拖进去后反而会编译错误; 


        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    互联网 iis7站长之家
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3