imageview控件点击事件,安卓imageview点击事件

http://www.itjxue.com  2023-01-04 18:08  来源:未知  点击次数: 

如何给uiimageview添加点击事件

给的UIImageView增加点击事件解决思路1:网友提示在该“button”上增加一个真正的透明button,这样就可以顺利执行点击事件了;但是本人尝试发现,如果我调整了button的透明度后,点击是没有效果的!可能是我操作错误,待再次验证。解决思路2:为的UIImageView增加手势[ImageView的addGestureRecognizer:我们自己的手势识别]如何创建一个手势?看看UITapGestureRecognizer的用法吧//单指单击UITapGestureRecognizer*singleFingerOne=[[UITapGestureRecognizer页头]initWithTarget:自操作:@selector(handleSingleFingerEvent:)]singleFingerOne.numberOfTouchesRequired=1;//手指数singleFingerOne.numberOfTapsRequired=1;//抽头次数singleFingerOne委托=自我;//单指双击UITapGestureRecognizer*singleFingerTwo=[[UITapGestureRecognizer页头]initWithTarget:自操作:@selector(handleSingleFingerEvent:)];singleFingerTwo.numberOfTouchesRequired=1;singleFingerTwo.numberOfTapsRequired=2;。singleFingerTwo委托=自我;//双指单击UITapGestureRecognizer*doubleFingerOne=[[UITapGestureRecognizer页头]initWithTarget:自操作:@selector(handleDoubleFingerEvent:)];doubleFingerOne.numberOfTouchesRequired=2;doubleFingerOne.numberOfTapsRequired=1;。doubleFingerOne委托=自我;UITapGestureRecognizer*doubleFingerTwo=[[UITapGestureRecognizer页头]initWithTarget:自操作:@selector(handleDoubleFingerEvent:)];doubleFingerTwo.numberOfTouchesRequired=2;doubleFingerTwo.numberOfTapsRequired=2;。doubleFingerTwo委托=自我;//如果不加下面的话,当单指双击时,会先调用单指单击中的处理,再调用单指双击中的处理[singleFingerOnerequireGestureRecognizerToFail:singleFingerTwo]//同理双指亦是如此[doubleFingerOnerequireGestureRecognizerToFail:doubleFingerTwo][self.viewaddGestureRecognizer:singleFingerOne][self.viewaddGestureRecognizer:singleFingerTwo][self.viewaddGestureRecognizer:doubleFingerOne][self.viewaddGestureRecognizer:doubleFingerTwo][singleFingerOne发布][singleFingerTwo发布][doubleFingerOne发布][doubleFingerTwo发布]处理事件的方法,代码://处理单指事件-(无效)handleSingleFingerEvent:(UITapGestureRecognizer*)发件人{如果(sender.numberOfTapsRequired==1){//单指单击的NSLog(@“单指单击”);}否则如果(sender.numberOfTapsRequired==2){//单指双击的NSLog(@“单指双击”);}}//处理双指事件-(无效)handleDoubleFingerEvent:(UITapGestureRecognizer*)发件人{如果(sender.numberOfTapsRequired==1){//双指单击的NSLog(@“双指单击”);}否则如果(sender.numberOfTapsRequired==2){//双指双击的NSLog(@“双指双击”);}}

怎样设置一个imageview的点击事件

在对一个VIEW注册单击事件监听后,onTouchEvent中是无法接收到该VIEW中的DOWN事件的,这其中有着一个事件传递的过程,介意你可以去查下,提供你一个解决方法:你可以使用setOnTouchListener来处理这个ImageView的点击事件,OnTouchListener里面的方法onTouch是有返回值的,返回true则说明已处理完毕不会再继续传递这个事件;返回false则说明未处理完毕需要继续传递这个事件,按你现在的问题,你应当返回false。

android怎么给imageview 添加点击事件

在Android开发中,ImageView、TextView、Button、ImageButton等控件的点击事件与按钮(Button)点击事件的添加都是相同的,即:

button.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

}

});

ListView点击事件无效或item点击事件无效

我们在开发过程中可能会遇到点击ListView或者RecyclerView的点击事件无效,可能就是因为item中含有Button、CheckBox等控件,它们会抢占该item本身的焦点,导致ListView本身点击事件失效,解决方式一般有3种,下边我们就来看具体有哪3种解决方式。

1:把Button、CheckBox替换为 TextView、ImageView;

2:设置Button、CheckBox的focuable 为false;

3:设置ListView的item的根布局android:descendantFocusability="blocksDescendants",一般推荐第三种,意思是ListView的item下边所有的子控件都不能获取焦点。

android:descendantFocusability的值有3种,其中ViewGroup指的是设置这个属性的View,在这里就指的是ListView的item的根布局:

实际操作-手把手探究tableViewCell上的控件点击事件

? ? 下面就让我们以纯iOS小白的视角,手把手一步步探究tableView中Cell上的控件点击事件。

1.tableViewCell上的控件触发点击事件

我们都知道,tableViewCell的点击事件,写个“didSelectRowAtIndexPath”方法就能实现行点击效果,经常我们做的是行点击之后页面跳转(push到另一个界面);

此时:如果我们在cell上自定义几个控件,然后点击控件,想要实现控件的点击效果,不实现cell的行点击效果:

参与测试的cell上的两个控件:一个UIButton,一个UIImageView。

我们都知道,UIButton的点击事件:添加一个addtarget,然后选择点击触发:UIControlEventTouchUpInside,就可以实现Btn的点击事件。

--探究1:点击Button的时候,因为Button在cell上,是否会同时触发Button的点击事件以及 cell的行点击事件?

--探究2:ImageView的点击事件

--探究3:为啥ImageView 没有 UIbutton 的addtarget方法?

如图,我们发现addTarget并不是所有的类都有这个方法--只有UIControl的子类才能有这个方法!

--探究4:没有addTarget方法的ImageView如何添加点击事件?

答:使用手势。

这里要切记:选择手势别选错,也别选默认的手势,要选择点按的Tap手势;

----------------测试:是否会和Btn一样,触发imageView的点按手势,不触发cell的行点击事件!

原因:imageView需要手动打开用户交互!

拓展:UIView,UIButton默认是可以进行用户交互,如果父控件不能(or 手动关闭用户交互),子控件即使是UIButton,也无法触发交互事件(例如点击事件)!!

2.tableViewCell上的控件触发点击事件实现页面跳转

需求:通过点击cell上的不同的按钮--实现不同页面跳转

如同,因为tableViewCell不是ViewController,没有navigationVC属性,并不能实现控制器的push操作!

--解决办法:值回传--通过控制器实现页面跳转!

回传的方法:a.通知(没跨界面的话用通知有点鱼,比较low)

? ? ? ? ? ? ? ? ? ? ?b.代理/Block,这里差不多,我使用的是代理,可以仅适用一个代理方法,将按钮的tag传过去判断。

需求如下:1.有网络数据请求;2.cell的数据是从控制器传过去的(可以通过字典转模型);3.使用AFN请求数据(异步请求)

问题:何时发起数据请求?

答:因为我们一开始并不知道要点击的是哪行的数据-在tableView的行点击(didSelectRowAtIndexPath)的时候,由于我们可以拿到点击的下标,通过下标可以知道我们点击的是哪行,此时发送数据请求

--错误:1.我们点击的是头像(UIImageView),触发的是头像的点按手势,并不会调用didSelectRowAtIndexPath方法;

? ? ? ? ? ? ? 2.异步请求,在点击的时候,发送请求,点击整个操作结束后,异步的请求都不一定执行完,由于异步执行,数据经常是当时获取没完成就接下去执行了,导致数据为空;

? ? ? ? ? ? ? 3.在2的基础上,执行完didSelectRowAtIndexPath之后AFN请求完毕,获取数据成功,以往我们经常调用tableView的刷新数据方法-reloadData,但是我们会发现didSelectRowAtIndexPath并不会再tableView reloadData之后再被调用一次!!所以导致了:数据一直是空的可能性!

-------------------------华丽分割线------------------------

正确做法:不在tableView的行点击进行数据请求,要拿到数据下标,并不只有didSelectRowAtIndexPath方法可以得到:

数据请求何时发送?

--在cell界面加载的时候,就会自动发送网络请求获取数据

当我们点击的时候,cell界面都不知道加载完成多少秒了,此时AFN发送的异步请求怎么说也该请求成功了(逻辑严谨性:此时加个网络请求数据是否成功的判断,成功在展示可以点击的按钮)

--怎么让控制器知道我们点击了哪行的cell -- 没有触发cell的didSelectRowAtIndexPath方法

我们拿到的当前行的数据,是tableView - cellForRowAtIndexPath方法设置cell数据展示的时候,一行一行传过来的,所以每个indexPath.row对应的数据,我们通过网络请求+数据回传(通过代理),还是当前行的数据!

解释如下图:

如图:我们并不调用行点击事件,但是当我们点击cell的按钮,通过代理把cell的内容(如上图的内容:b)回传到控制器tableView上显示的时候,从tableVIew展示的内容--b,我们就可以知道刚才点击的是哪个cell里面的按钮!

--而且完美解决了AFN异步网络请求导致的需要数据可能为空的问题,也希望能给新手们提供一点探究原理的思路和流程

抽空写了一个简单Demo: Demo

(责任编辑:IT教学网)

更多

推荐Dreamweaver教程文章