1. 程式人生 > >iOS中超出父檢視的按鈕點選事件響應處理

iOS中超出父檢視的按鈕點選事件響應處理

在iOS開發中會遇到一些設計樣式,需要把按鈕一部分懸空在父檢視的上面,但是當我們點選該按鈕時,超出了父檢視的懸空部分不會響應該按鈕的點選事件。

原理就是iOS的touch事件的相應是從最下方的父檢視開始的,系統判斷點選的座標點上沒有子檢視,所以不再響應,該原理可參見之前寫過的這篇文章,

效果圖如下,寫評論這個按鈕需要做處理。


然後,分析一下程式碼,這裡主要說一下核心程式碼吧。在自定義的UIView檢視類中,我們重寫點選檢視的方法,

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

{

UIView * view = [

superhitTest:point withEvent:event];

if (view == nil) {

// 轉換座標系

CGPoint newPoint = [commentImageViewconvertPoint:point fromView:self];

// 判斷觸控點是否在button

if (CGRectContainsPoint(commentImageView.bounds, newPoint)) {

            view = commentImageView;

        }

    }

return view;

}

commentImageView是這懸空的按鈕檢視,這裡用的是一個UIImageView,因為外包美工做的圖Px大小有問題,不然肯定用的UIButton。

該方法就是在點選懸空按鈕懸空部分時,判斷該點上有沒有響應的子檢視,如果沒有,就再判斷一下該點是不是在點選的這個按鈕的檢視座標範圍內,是的話就把這個按鈕檢視返回。這樣我們的點選事件就有反應了。


相關推薦

iOS超出檢視按鈕事件響應處理

在iOS開發中會遇到一些設計樣式,需要把按鈕一部分懸空在父檢視的上面,但是當我們點選該按鈕時,超出了父檢視的懸空部分不會響應該按鈕的點選事件。 原理就是iOS的touch事件的相應是從最下方的父檢視開始的,系統判斷點選的座標點上沒有子檢視,所以不再響應,該原理可參見之前寫過

Button控制元件位置超出檢視響應的解決辦法

在日常開發中我們經常和按鈕打交道,但是有時候會碰到比較難處理的問題,就是按鈕不響應點選事件,這時候我們需要從下面幾方面排查。 按鈕不響應的原因 1、按鈕新增到了一個沒有開啟使用者互動的父View上,例如UIImageView,這時候開啟父試圖的互動 view.us

ios 手勢檢視的時候不響應檢視事件

手勢點選子檢視的時候不響應父檢視的點選事件; 一句程式碼搞定: if( CGRectContainsPoint(_BGView.frame, [sender locationInView:_

iOS 獲取UIWebView上面的按鈕事件

在網上看到很多文章都說iOS的UIWebView比較耗記憶體,在我的專案中,最開始我也是用UIWebView來載入網頁的。剛開始載入的是自己拼接成的Html,後來在Html中加入一個按鈕,點選之後用當前的UIWebView去載入網路上的網頁。程式跑起來發現非常耗記憶體,載入幾個網上的網頁之後就爆記憶體警告了,

如何讓超出檢視區域的子檢視實現事件

在父檢視重寫hitTest:withEvent:方法,程式碼如下: - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

openDialog()確定按鈕事件

openDialog()中確定按鈕點選事件 本文是我在開發過程中,遇到的也是我不知道的知識,所以此篇僅當做自己以後借鑑用的,如果能對看官你也有用,榮幸之至。 form.ajaxSubmit 首先,在jeeplus中xxxform.jsp檔案中,一般openDialog()

AndroidRecyclerview使用7----條目按鈕事件,在activity呼叫(介面回撥)

0引入Recyclerview的支援庫    compile 'com.android.support:recyclerview-v7:23.4.0' 1效果圖: 2程式碼: 2.1MainActivity中: <span style="font-size:18p

Android開發按鈕事件的監聽

在Android開發中用到是很正常的事情。那麼為按鈕點選事件新增監聽器是我們開發過程中遇到的常見問題。 1、直接在onCreate( )方法中新增 匿名內部類作為事件監聽器類 protected void onCreate(Bundle savedIn

【Cocos2dx】使用CCControlButton建立按鈕按鈕事件事件的元件獲取,setPosition的座標問題

按鈕不僅在遊戲,在任何地方都是不可或缺卻又是最基本的東西。在遊戲引擎Cocos2dx中也不例外。 下面用一個例子說明Cocos2dx中如何使用按鈕,同時,如果在Cocos2dx中獲取層,也就是場景、舞臺中的元件。 如下圖,有一個按鈕Clickme,被點選時候與不被點選的時間

Android的ListView響應item內部按鈕事件

ListView可以說是我們在實際開發中最常用到的控制元件了。可以說每一個app都需要用到listview來顯示列表,如果我們需要點選listView的不同按鈕跳轉到不同頁面,具體邏輯在重寫的onItemClick()方法中實現,這裡不多說,不瞭解listVie

解決DialogFragment自定義佈局的按鈕事件無效

在DialogFragment中如果有時會突然發現我們寫的自定義佈局的點選事件無效,如果寫在onCreateView()方法中,如果又重寫了onCreateDialog()方法,建議把控制元件的初始化和

asp.net按鈕事件

ASP.NET中Onclick和OnserverClick事件的區別 對於伺服器按鈕控制元件(即<asp:Button>型別的按鈕): 伺服器響應事件:OnClick 客戶端響應屬性:OnClientClick 對於html按鈕控制元件(即<input ty

ios button超出檢視如何響應事件

 今天中午吃飯的時候,公司一哥們突然問了我一句,怎麼做一個超出tabBar高度的按鈕,而且還能響應事件,吃完飯之後,我思索了一下,決定動手試試,其實邏輯很簡單,只需要繼承UITabBarContro

list按鈕事件在activity處理

如果listview中有按鈕,點選事件可以寫到adapter中,但是你想寫到avtivity中,發現以前沒遇到過。這裡就給你們一個方法,利用介面回撥可以實現listview中按鈕點選事件在activity中處理。其實和recycleview差不多,recycle

Android ListviewButton按鈕事件衝突解決辦法

 今天做專案時,ListView中含有了Button元件,心裡一早就知道肯定會有衝突,因為以前就遇到過,並解決過,可惜當時沒有記錄下來。 今天在做的時候,繼續被這個問題鬱悶了一把,後來解決後,趕緊來記錄下,以便日後參考。   首先,其實Listview中Button按

jquery定義之後的按鈕事件,會產生累計的情況

使用jquery的on()方法為元素綁定了點選事件,點選同時傳送請求。完成後看效果,第一次點選沒有問題。再一次點選後發現傳送了兩次請求,後面再點擊發現請求的數量越來越多。當排查之後,發現只有一個元素綁定了事件,而且只調用了一次之後,得出最有可能的一種情況,就是點選事件被累加綁定了。 $("#ad

Android開發20——單個監聽器監聽多個按鈕事件

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

觸發子元素的事件而不觸發元素的事件

<div class="divone" onclick="divone(this)"> <div class="divchild" onclick="divchild(this)"></div> &

Cell左滑時無法響應左滑按鈕事件的定位

剛開始,開發一個新功能,需要用到左滑編輯,刪除功能。程式碼如下: - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {     //第二組可以

實現穿透、執行下層檢視事件

原文 , 只記錄我看懂的部分 http://www.cnblogs.com/klaus/archive/2013/04/22/3036692.html iOS系統檢測到手指觸控(Touch)操作時會將其放入當前活動Application的事件佇列,UIApplic