1. 程式人生 > >iOS開發~子檢視超過父檢視範圍的事件響應問題

iOS開發~子檢視超過父檢視範圍的事件響應問題

當按鈕超過了父檢視範圍,點選是沒有反應的。因為訊息的傳遞是從最下層的父檢視開始呼叫hittest方法。

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    UIView *view = [super hitTest:point withEvent:event];
    return view;
}

當存在view時才會傳遞對應的event,現在點選了父檢視以外的範圍,自然返回的是nil。所以當子檢視(比如按鈕btn)因為一些原因超出了父檢視範圍,就要重寫hittest方法,讓其返回對應的子檢視,來接收事件。
<span style="font-family:FangSong_GB2312;font-size:18px;">- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    UIView *view = [super hitTest:point withEvent:event];
    if (view == nil) {
        CGPoint tempoint = [yourBtn convertPoint:point fromView:self];
        if (CGRectContainsPoint(yourBtn.bounds, tempoint))
        {
            view = yourBtn;
        }
    }
    return view;
}</span>

相關推薦

iOS開發~檢視超過檢視範圍事件響應問題

當按鈕超過了父檢視範圍,點選是沒有反應的。因為訊息的傳遞是從最下層的父檢視開始呼叫hittest方法。 - (UIView *)hitTest:(CGPoint)point withEvent:(UI

ios檢視檢視同時處理輸入事件

在使用UITableView巢狀UICollectionView的過程中, collectionView作為cell,我希望,點選collectionView的讓tableView對應的行也被選中。 如果直接判斷collectionView所在的行,然後設定cell.sel

iOS開發如何在一個透明檢視上新增不透明的控制元件

相信很多同學都會遇到過這個問題, 當我們彈出一個半透明的遮蓋層時, 又想在遮蓋層上加一些子檢視, 這個時候如果你的遮蓋層設定了alpha屬性,  你會驚訝的發現, 載入遮蓋層上的所有子控制元件都是透明

iOS 檢視超出檢視響應解決辦法

父檢視中重寫該方法 Objective-C - (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event { UIView * view = [super hitTe

ios獲取檢視檢視檢視的座標

例如:self.view中add了一個tableView,tableViewCell中添加了一個textField,想要獲得textField在self.view中的座標。 CGRect textFrame = [textField.superview convertRec

iOS開發之collection view 的檢視裁剪問題

  collection view剪裁成特定樣式,剪裁上面的兩個角為圓角,需要在cell方法裡面剪裁cell。 [Utile setrangeView:cell]; 不能使用 [Utile setrangeView:cell.contentView];會導致cell的寬度和高度也被剪裁。下面就來跟大家分享一下

ios開發:跳轉到根檢視並跳轉到第一個tabbar第一個頁面

跳轉到根檢視並跳轉到第一個tabbar第一個頁面 // 直接跳轉到跟檢視 self.navigationController.tabBarController.hid

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

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

iOS開發之自定義ActionSheet檢視

有時我們需要用到actionSheet來展示,但是但是往往系統的介面顯示很醜或者並不符合UI的要求,所以在這裡自定義一個,方便以後使用,後續有時間寫一下Swift的開發。自定義ActionSheet的關鍵點,就是UI的樣式修改和設計調整,還有就是點選單元格時進行的後續操作,再

iOS-獲取視圖控制器

blog pan control end sna uiview nco 當前 控制 開發中有的時候需要涉及當前視圖的父級視圖,可以通過UIResponder來獲取,有兩種實現方式: UIView *next=sender; while ([next superview]

iOS 查詢字串在字串中的所有位置

/** 改變UILabel部分字元顏色 */ - (void)setContentLabelColor { NSString *content = @"2018-08-27\n寫部落格\n2018-08-27\n寫部落格\n2018-08-27\n寫部落格\n

控制元件搶佔控制元件事件響應

1.在普通佈局中,父控制元件中含有button、ImageButton、CheckBox、EditText,RatingBar等時,點選事件失效。 例如:列表中的item佈局中含有RatingBar子控制元件。 在item的根佈局檔案中加入:android:

iOS開發移除檢視控制器

OC語法中沒有直接移除子檢視的方法,但是可以通過查詢子檢視來移除 for(UIView *view in [self.view subviews]) { [view removefromsuperview] } 來點直接的:實際上是用了NSArray的mak

檢視A超出檢視B範圍點選觸發檢視A中的點選事件

Demo 解決示例 1、定義子檢視 // .h檔案 #import <UIKit/UIKit.h> @interface ButtonView : UIView @property (nonatomic, copy) void (^buttonClick)(UI

iOS 檢視 檢視 UIView 相關的方法

初始化一個檢視- (id)initWithFrame:(CGRect)aRect //用指定的frame 初始化一個檢視物件結束檢視中的編輯狀態- (BOOL)endEditing:(BOOL)force  //這個在彈回鍵盤時特別有用關於響應- (void)addGestureRecognizer:(UIG

iOS檢視捕獲到的touches如何讓檢視響應

用代理實現最簡單了,子檢視宣告一個protocol和與之對應的method和delegate property,然後父檢視實現。例如:子檢視SonView.h:@class SonView; //這個必不可少,因為真正的class interface在下面宣告,而在protocol宣告中又要用到這個class

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

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

iOS----在檢視中獲取檢視的控制器

在實際專案當中,我們經常會遇到需要在一個父類為UIView的子檢視上進行POP或是PUSH操作,但該子檢視是不能用POP或PUSH的,這時候我們就可以根據該子檢視獲取到父檢視的控制器,從而進行POP或P

iOS開發移除所有檢視

<span style="font-size:18px;"><span style="background-color: rgb(255, 255, 255);">iOS開發中

檢視控制器類是使用Xib建立的,類如何繼承類的樣式

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {     self = [super initWithNib