1. 程式人生 > >解決UIScrollView,UIImageView等控制元件不能響應touch事件的問題

解決UIScrollView,UIImageView等控制元件不能響應touch事件的問題

關於UIScrollView,UIImageView等控制元件不能響應touch事件,主要涉及到事件響應者鏈的問題,如果在UIScrollView,UIImageView等控制元件添加了子View,這樣事件響應將會被UIScrollView,UIImageView等控制元件終止,而且這些控制元件的userInteractionEnabled屬性預設的是NO,所以想要解決使用觸控事件,我通過兩種方法進行解決。

方法一:

建立UIScrollView,UIImageView等控制元件的類別檔案,將touch的四個方法進行父類方法重寫:(建立Objective-C File檔案,然後修改型別,建立對應的類別檔案)

#import "UIScrollView+TouchEvent.h"

@implementation UIScrollView (TouchEvent)

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [[self nextResponder] touchesBegan:touches withEvent:event];
    [super touchesBegan:touches withEvent:event];
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    [[self nextResponder] touchesMoved:touches withEvent:event];
    [super touchesMoved:touches withEvent:event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [[self nextResponder] touchesEnded:touches withEvent:event];
    [super touchesEnded:touches withEvent:event];
}
-(void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [[self nextResponder] touchesEnded:touches withEvent:event];
    [super touchesEnded:touches withEvent:event];
}
@end

方法二:通過給UIScrollView,UIImageView等控制元件新增手勢,執行對應的方法

如:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    bgScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 200, 400)];
    bgScrollView.backgroundColor = [UIColor lightGrayColor];

//新增手勢

    UITapGestureRecognizer *tapGestureR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(updateImageVAction:)];
    [bgScrollView setUserInteractionEnabled:YES];
    [bgScrollView addGestureRecognizer:tapGestureR];

    [self.view addSubview:bgScrollView];
    
    textFie = [[UITextField alloc] initWithFrame:CGRectMake(50, 50, 100, 50)];
    textFie.layer.borderWidth = 1;
    [bgScrollView addSubview:textFie];
    
}

//手勢執行的方法

-(void)updateImageVAction:(UITapGestureRecognizer *)tapGR
{
    [textFie resignFirstResponder];
}

相關推薦

解決UIScrollViewUIImageView控制元件不能響應touch事件的問題

關於UIScrollView,UIImageView等控制元件不能響應touch事件,主要涉及到事件響應者鏈的問題,如果在UIScrollView,UIImageView等控制元件添加了子View,這

Android自定義控制元件系列 十:利用新增自定義佈局來搞定觸控事件的分發解決組合介面中特定控制元件響應特定方向的事件

        這個例子是比較有用的,基本上可以說,寫完這一次,以後很多情況下,直接拿過來addView一下,然後再addInterceptorView一下,就可以輕輕鬆鬆的達到組合介面中特定控制元件來響應特定方向的觸控事件了。         在寫Android應用

Android程式碼中設定圖片文字自定義顏色Linearlayout控制元件設定背景

平時專案中遇到的問題,在此記錄警示自己,也可使別人少走彎路。 ————–> 1. 程式碼中設定圖片,使用iv.setImageResource(R.mipmap.yishenghuo2);

asp.net動態生成控制元件併為控制元件繫結事件

1.動態查詢控制元件的例子:         //查詢控制元件         Image img = (Image)Page.FindControl("Image1");         //設定圖片資源         img.ImageUrl = "~/image/p

Flutter: PageView/TabBarView 控制元件儲存狀態的問題解決方案

前言: 我們通常會在用到 PageView + BottomNavigationBar 或者 TabBarView + TabBar 的情況. 但是大家發現當我們切換到另一頁面的時候, 前一個頁面就會被銷燬, 當再返回前一頁時, 頁面會被重建. 隨之資料要重新載入,

Qt QListWidget QTreeWidget QComboBox控制元件禁用滾動條的右鍵選單

有時候在開發新控制元件的時候,會偶然點到滾動條的右鍵選單,出現之後很難看 那麼怎麼去掉呢? 其實很簡單,如果是QListWidget ,QTreeWidget控制元件, //記得包含標頭檔案 #i

LinearLayout介面放置過多控制元件導致下方控制元件不可見的解決方法:

小編在進行專案的程式碼編寫時,發現了該問題。最簡單的方法便是使用滾動條,通過滑動,實現對下方控制元件的操作。 通過對相對應的佈局xml檔案進行操作,在最外層的LinearLayout佈局外新增ScrollView。 程式碼實現: <?xml vers

安卓GridLayout控制元件無法使用View requires API level 14 (current min is 10)

更改 AndroidManifest.xml 檔案中的     <uses-sdk         android:minSdkVersion="10"         android:targetSdkVersion="10" /> 為     <

專案過程中有c++控制元件層級問題的解決

首先要明白,同類的層級是可以通過z-index來控制;但非同類之間的層級的關係: c++控制元件>div; 但是在使用過程中,如何合理控制各個之間的關係呢? 如我曾經碰到過一個問題;是控制元件放在彈出框中;但2個彈出框同時開啟時,並相互移動,將一個彈出框放在另一個彈出

onresize()調整瀏覽器視窗時使圖片控制元件自適應地變化大小

今天學習JS時,按照教程裡如下程式碼實現“改變瀏覽器視窗的圖片自適應問題”,但沒有達到想要的效果,圖片在改變瀏覽器視窗的時候越變越大,重新整理頁面後又恢復原大小。 height = (document.body.clientHeight-100)*0.9; document

ScrollView巢狀ListView,GridView,ViewPager以及這些控制元件自動滾動到底部問題的解決

Google是不推薦在ScrollView 中放入一個可滾動的選單的,比如放置一個ListView、GridView、ViewPager這些控制元件的,儘量不要讓兩者巢狀,但有時候還是有這個需求,先不管它合不合理。如果直接在ScrollView中巢狀只會出現一行,然後在其中滾動,這樣不是很好,下面是我的整理

解決C#介面上的控制元件突然全部消失但".Disigner"中還存在這些控制元件定義的方法。

     這個問題我自己遇到過一次,當時整個人都懵了,因為剛佈局好介面,還沒來得及備份。開啟這個視窗對應的“.Designer",發現控制元件的定義都還在,更懵了,完全不知道是為啥。然後上網查資料,給的原因是“C#設計器不安全,這個現象偶爾會出現”。恩,看來我很幸運啊,哈哈哈

android 解決 addView()操作之後之前的控制元件位置重置的問題

這兩天在給同事看一個問題。她在一個ViewA中加入一個子控制元件view1之後,然後通過手指滑動,來移動這個子控制元件,也就是改變了這個子控制元件的位置了。然後再加入另外一個子控制元件view2,這時候view1的位置被重置了,也就是跑到了viewA的左上角了。 同事給我講

[工作札記]03: 微軟Winform窗體中ListView、DataGridView控制元件的Bug會導致程式編譯失敗影響範圍:到最新的.net4.7.2都有

工作中,我們發現了微軟.net WinForm的一個Bug,會導致窗體設計器自動生成的程式碼失效,這個Bug從.net4.5到最新的.net4.7.2都存在,一直沒有解決。最初是我在教學工作中發現的,後來工作的時候該Bug也常現。 重現步驟:   使用VisualStudio2013/2015/2017/

重繪ListCtrl中增加子控制元件Edit是在父控制元件失去焦點時控制元件不進行隱藏

問題:現在有一個listctrl控制元件,需要在某一列上新增一個子控制元件edit。當點選子控制元件(edit)時,子控制元件顯示出來,父控制元件(ListCtrl)已經失去焦點了。此時,要是滑鼠點選的位置不在該控制元件內,edit處於顯示狀態,父控制元件(ListCtrl)是失去焦點狀態。

flutter的對齊控制元件拓展空間listview,gridview控制元件使用

1.使用mainAxisAlignment和crossAxisAlignment屬性來控制行或列如何對齊其子控制元件。對於行,主軸水平執行,橫軸垂直執行。對於列,主軸垂直執行,橫軸水平執行。 2.在頁面展示的時候經常出現螢幕展示不全,這時候就會在螢幕上出現斜線框子。這樣的解決方法一是使用l

統計圖圖文組合控制元件

效果圖: package com.logistics.widgets; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; impor

第六週學習筆記vc各類控制元件的輸入輸出

6w學習筆記  vc控制元件的輸入輸出 單選按鈕 當單擊 RadioButton 控制元件時,其 Checked 屬性設定為 true,並且呼叫 Click 事件處理程式。當 Checked 屬性的值更改時,將引發 CheckedChanged 事件。如果 AutoCheck 屬性設定為 tr

C#匯出 Excel 時 生成 CheckBox 控制元件

在使用 Microsoft.Office.Interop.Excel 元件匯出Excel 表格時,要把匯出前的  CheckBox 控制元件一同匯出到 excel 表格中,對於這個功能 看似很簡單,但 Microsoft.Office.Interop

iOS 開發 WKWebView載入網頁對網頁控制元件進行更改使用OC新增JS

//獲取載入的網頁 - (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void