在UITableView的 didSelectRowAtIndexPath中获取点击区域

项目中,要在UITableViewCell区分不同的点击区域,比如左边点击执行某个操作,右边点击执行另一个操作。原本我的方案是在cell的左边和右边各放一个透明的UIButton,点击两个button执行不同的操作,而controller中的didSelectRowAtIndexPath函数就设为空了。但是后来有个问题,就是可以同时用多个手指长按在不同的cell上,导致触发过个操作,而且cell的选中态也不好控制。

后来想到,UIview的触摸事件可以得到触摸的位置,那可不可以在cell的touch事件中得到位置,保存到一个变量中,然后didSelectRowAtIndexPath函数再根据这个变量执行不同的操作呢?

代码如下:

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
    UITouch* touch = [[event allTouches] anyObject];
    CGPoint leftLocation = [touch locationInView: _bgViewLeft];
    CGPoint rightLocation = [touch locationInView: _bgViewRight];
    
    if ([_bgViewLeft pointInside:leftLocation withEvent:event])
    {
        self.touchLocation = eCellTouchLocationLeft;
        
        [super touchesBegan:touches withEvent:event];
    }
    else if ([_bgViewRight pointInside:rightLocation withEvent:event])
    {
        self.touchLocation = eCellTouchLocationRight;
        
        [super touchesBegan:touches withEvent:event];
    }
    else
    {
        self.touchLocation = eCellTouchLocationALL;
        
        [super touchesBegan: touches withEvent:event];
    }
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    
    UPAboutMeTableViewCell *cell = (UPAboutMeTableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
    
    if (cell.touchLocation == eCellTouchLocationLeft || cell.touchLocation == eCellTouchLocationALL)
    {
        [self aboutMeTableViewCellonDidClickInLeft:cell];
    }
    else
    {
        [self aboutMeTableViewCellonDidClickInRight:cell];
    }
}

在UITableView的 didSelectRowAtIndexPath中获取点击区域,布布扣,bubuko.com

时间: 2024-12-18 21:34:51

在UITableView的 didSelectRowAtIndexPath中获取点击区域的相关文章

在CTreeCtrl控件点击事件中获取点击的项

网上搜了一下,有两种方法: 1.使用GetSelectedItem() HTREEITEM hItem = m_treeCtrl.GetSelectedItem(); CString strText = m_treeCtrl.GetItemText(hItem); MessageBox(strText); 2.使用HitTest() CPoint pt; GetCursorPos(&pt); m_treeCtrl.ScreenToClient(&pt); UINT uFlags; HTRE

AutoCAD中获取鼠标右键点击事件(根据明经论坛ahlzl文章改写)

using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.Runtime; [assembly:CommandClass(typeof(TestRunCommand.Class1))] namespace TestRunCommand { public class Class1 { const int WM_RBUTTONDOWN = 516; [CommandMethod("TestRunCommand")]

给Activity设置Dialog属性,点击区域外消失;

1.在AndroidManifest.xml中给Activity设置样式: <activity android:name=".MyActivity" android:theme="@style/MyDialog" android:label="@string/app_name" > 2.在res-value-style.xml中设置dialog样式: <?xml version="1.0" encoding=

iOS中添加UITapGestureRecognizer手势识别后,UITableView的didSelectRowAtIndexPath失效

ViewDidLoad中注册手势的部分代码如下: [cpp] view plaincopy UITapGestureRecognizer *oneTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyBoard)] autorelease]; oneTap.delegate = self; oneTap.numberOfTouchesRequired = 1; [self.view a

ios UITableView 获取点击cell对象

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell= [tableView cellForRowAtIndexPath:indexPath]; // 获取cell 对象 UILabel *name = (UILabel *)[cell.contentView viewWithTag:111]; // 获取昵称 _inp

UITableView中cell点击的绚丽动画效果

本人视频教程系类   iOS中CALayer的使用 效果图: 源码: YouXianMingCell.h 与 YouXianMingCell.m // // YouXianMingCell.h // CellAnimation // // Created by YouXianMing on 14/12/27. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import <UIKit/UIKit.h> @interfac

在iOS中获取UIView的所有层级结构 相关

在iOS中获取UIView的所有层级结构 应用场景 在实际 iOS 开发中,很多时候都需要知道某个 UI 控件中包含哪些子控件,并且分清楚它们的层级结构和自个的 frame 以及 bounds ,以便我们完成复杂的 UI 布局,下面的代码就能很方便的获取某个 UI 控件的所有的层级结构,我们可以用它计算,然后把结果写入到本地磁盘,导出成XML文件,这样我们就可以很直观的看出它内部的细节. /** * 返回传入veiw的所有层级结构 * * @param view 需要获取层级结构的view *

Activity中获取view的高度和宽度为0的原因以及解决方案

在activity中可以调用View.getWidth.View.getHeight().View.getMeasuredWidth() .View.getgetMeasuredHeight()来获得某个view的宽度或高度,但是在onCreate().onStrart().onResume()方法中会返回0,这是应为当前activity所代表的界面还没显示出来没有添加到WindowPhone的DecorView上或要获取的view没有被添加到DecorView上或者该View的visibili

Spring中的AOP(五)——在Advice方法中获取目标方法的参数

摘要: 本文介绍使用Spring AOP编程中,在增强处理方法中获取目标方法的参数,定义切点表达式时使用args来快速获取目标方法的参数. 获取目标方法的信息 访问目标方法最简单的做法是定义增强处理方法时,将第一个参数定义为JoinPoint类型,当该增强处理方法被调用时,该JoinPoint参数就代表了织入增强处理的连接点.JoinPoint里包含了如下几个常用的方法: Object[] getArgs:返回目标方法的参数 Signature getSignature:返回目标方法的签名 Ob