20141013个人日志(button的tag巧用,在tableView的代理方法外面取响应cell的方法)

    项目里有这么个问题,在 tableView 的 cell 上添加按钮,因为涉及到 cell 的重用,cell 上的按钮也会被重用。比如,用 tableView 显示一些需要下载的条目,每个条目右侧可安放一个“下载”按钮,这个按钮就是会被重用的。按钮有响应事件,那就得在响应事件里区分是哪个 button 的响应事件。

    通常在 tableView 的代理方法里给button设置不同的tag(button自己本身有tag属性),然后就可以根据这个tag来区分响应的button事件。响应事件里默认的一个参数就是(id)sender,实际上也就是(UIButton*)sender

这个sender就是button对象自己。用 [sender tag] 作为switch的参数可区分相应的事件。

    我之前是这么想的,因为 button 是加在 cell.contentView 上的,用方法[cell.contentView viewWithTag:tag]就可以取出相应的button。具体操作如下:

<span style="white-space:pre">	</span><span style="font-size:18px;">NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; //取出indexPath
      UIButton *btn = (UIButton *)[[self.tableView cellForRowAtIndexPath:indexPath].contentView viewWithTag:0];             </span>
<span style="font-size:18px;"><span style="white-space:pre">	</span>   //用相应的indexPath来找相应的cell
        [btn setEnabled:NO];   //可以设置相应的button属性了</span>

    今天完成清除地图缓存里的bug修改。bug表现为:上述的cell上的按钮,点击清除缓存后仍然可以继续点击,因为button是共用的,不太好处理点击事件,需要分别设置不同的状态变量来区分。

状态:

typedef enum whichAlertViewToShow
{
    SearchHistoryCacheClearUpType,
    clearUpSearchHistorySuccessed,
    clearUpSearchHistoryFailed,
    
    MapCacheClearUpType,
    ClearUpMapCacheSuccessed,
    clearUpMapCacheFailed,
}AlertViewToShowType;

定义变量

BOOL _isSearchHistoryCacheClearUp;
BOOL _isMapCacheClearUp;
AlertViewToShowType _showType;

初始化

        _isSearchHistoryCacheClearUp = NO;
        _isMapCacheClearUp           = NO;

button的响应事件函数

-(void)pressRouteCalculate:(UIButton*)sender
{
    switch ([sender tag])
    {
        case 0:
            if (!_isSearchHistoryCacheClearUp)
            {
                _showType = SearchHistoryCacheClearUpType;
                CMAlertView * alert = [[CMAlertView alloc] initWithTitle:@"提醒"
                                                                 message:@"是否清除搜索历史记录"
                                                                delegate:self];
                [alert show];
                [alert release];
        }
            break;
        case 1:
            if (!_isMapCacheClearUp) {
                _showType = MapCacheClearUpType;
                CMAlertView * alert = [[CMAlertView alloc] initWithTitle:@"提醒"
                                                                 message:@"是否清除地图缓存"
                                                                delegate:self];
                [alert show];
                [alert release];
            }
            break;
        default:
            break;
    }
}

警告框的done按钮响应的代理方法

-(void)clickDoneButton:(CMAlertView *)alertView
{
    if (_showType == SearchHistoryCacheClearUpType)
    {
        if([[CMHistoryRecordCenter shared] removeWithType:CMHistoryRecordTypeKeySearch])
        {
            _isSearchHistoryCacheClearUp = YES;
            _showType = clearUpSearchHistorySuccessed;
            CMAlertView * alert = [[CMAlertView alloc] initWithTitle:@"提醒"
                                                             message:@"已经清除搜索历史记录!"
                                                            delegate:nil];
            [alert show];
            [alert release];
            [self.tableView reloadData];
        }
        else
        {
            _isSearchHistoryCacheClearUp = NO;
            _showType = clearUpSearchHistoryFailed;
            CMAlertView * alert = [[CMAlertView alloc] initWithTitle:@"提醒"
                                                             message:@"清空失败!"
                                                            delegate:nil];
            [alert show];
            [alert release];
        }
    }
    else if (_showType == MapCacheClearUpType)
    {
        if([[SystemConfig shared] deleteMapCache])
        {
            _isMapCacheClearUp = YES;
            _showType = ClearUpMapCacheSuccessed;
            CMAlertView * alert = [[CMAlertView alloc] initWithTitle:@"提醒"
                                                             message:@"地图缓存已经清空!"
                                                            delegate:nil];
            [alert show];
            [alert release];
            [self.tableView reloadData];
        }
        else
        {
            _isMapCacheClearUp = NO;
            _showType = clearUpMapCacheFailed;
            CMAlertView * alert = [[CMAlertView alloc] initWithTitle:@"提醒"
                                                             message:@"清空失败!"
                                                            delegate:nil];
            [alert show];
            [alert release];
        }
    }
}



还修改了下载离线地图以及路口放大图的进度条显示问题等。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值