亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS開發中Subview的事件響應以及獲取subview的方法

2020-07-26 03:33:40
字體:
來源:轉載
供稿:網友

Subview的事件響應
在view的層級里面,默認情況下subview是可以顯示到其父view的frame區域以外的,通過設置clipToBounds屬性為YES,可以限制subview的顯示區域。但是touch在各個UIView中傳遞的時候,區域時限制在view的frame內,此處包含兩個信息:1、在當前view的frame以外所做的操作是不會傳遞到該view中的,這一點很容易理解。2、如果touch事件是發生在當前view的frame以外,該view所有的subview將也不會再收到該消息。這一點通常容易被我們忽略,很多奇怪的問題就是這個引起的。
 
  下面請看一個小例子,定制view的代碼如下:
 

復制代碼 代碼如下:

SvTestClipSubviewEvent.h


//

//  SvTestClipSubviewEvent.h

//  SvUIViewSample

//

//  Created by maple on 3/19/12.

//  Copyright (c) 2012 smileEvday. All rights reserved.

//

//  默認的情況下,subView可以超出父view的frame,即可以顯示到父View的外邊

//  但是消息的接受返回卻是由于父View的大小限制,即出了父View的subView將不能收到消息

//  在程序中一定要注意當前程序view的最底層是充滿整個window的可用區域的,

//  否則將會導致某些區域明明有按鈕但是卻點不中的問題

#import <UIKit/UIKit.h>

@interface SvTestClipSubviewEvent : UIView

@end

復制代碼 代碼如下:

//
//  SvTestClipSubviewEvent.m
//  SvUIViewSample
//
//  Created by maple on 3/19/12.
//  Copyright (c) 2012 smileEvday. All rights reserved.
//

#import "SvTestClipSubviewEvent.h"

@interface SvTestClipSubviewEvent()

- (void)btnAction:(UIButton*)btn;

@end

@implementation SvTestClipSubviewEvent

- (id)initWithFrame:(CGRect)frame
{   
    self = [super initWithFrame:frame];   
    if (self) {       
        // Initialization code       
        self.backgroundColor = [UIColor redColor];               
        UIButton *testOutBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];                    testOutBtn.frame = CGRectMake(-80, -50, 70, 30);      
        [testOutBtn addTarget:self action:@selecto (btnAction: forControlEvents:UIControlEventTouchUpInside];       
        [testOutBtn setTitle:@"I'm out" forState:UIControlStateNormal];       
        [self addSubview:testOutBtn];                
        UIButton *testInBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];                    testInBtn.frame = CGRectMake(20, 30, 70, 30);       
        [testInBtn setTitle:@"I'm in" forState:UIControlStateNormal];       
        [testInBtn addTarget:self action:@selector(btnAction: forControlEvents:UIControlEventTouchUpInside];       
        [self addSubview:testInBtn];   
    }   
    return self;
}


/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{   
    // Drawing code
}
*/

- (void)btnAction:(UIButton*)sender
{   
    NSLog(@"HI, you tap button %@", [sender titleForState:UIControlStateNormal]);
}
@end


  在程序的ViewController中添加如下測試代碼:
 

復制代碼 代碼如下:

SvTestClipSubviewEvent *testClipSubView = [[SvTestClipSubviewEvent alloc]initWithFrame:CGRectMake(100, 100, 150, 150)];
[self.view addSubview:testClipSubView];
[testClipSubView release];

  運行可以看到如下界面:

獲取subview
通常我們在view層級里面對subView的操作可以通過兩種方式:1、保留一個subview的引用,然后在類中通過該引用對該subview進行操作,但是要注意在適當的位置添加內存維護的代碼,退出前手動釋放。2、設置subview的Tag,讓后在要使用的時候,通過viewWithTag獲取到相應的subview,這種方法比較簡潔,也不用自己去維護內存。
 
  ViewWithTag: 通常采用深度遍歷優先的算法,返回第一個tag和給定Tag相等的subview。這就導致了一個當一個view的多個subview的tag相同的時候,我們通過該方法得到的view可能并不是自己想要的。
 
  下面通過一個小例子驗證一下,代碼如下:
 

復制代碼 代碼如下:

//
//  SvTestViewTag.h
//  SvUIViewSample
//
//  Created by maple on 3/18/12.
//  Copyright (c) 2012 smileEvday. All rights reserved.
//
//  view根據Tag獲取subView的時候執行的是深度優先遍歷的算法
//  返回第一個Tag和請求tag相等的子View
//  從subViews中查找,最下層的優先找到

#import <UIKit/UIKit.h>

@interface SvTestViewWithTag : UIView

@end


例子中每個subview都是一個UILabel,而且設置了相應的內容。按鈕的響應函數的實現思路:首先隱藏所有類型為UILabel的subview(排除UIButton,因為button需要一直顯示),然后根據指定的Tag獲取到相應的subview,該subview及其superView的hidden屬性為NO。這樣就可以保證點擊按鈕的時候只顯示的是第一個tag和指定tag相等的subview。
 
  為了驗證viewWithTag獲取subview的原理:
 
  首先我在subview1中添加了兩個tag都為11的subview11和subview12。 運行程序可以,當我們點擊"Show Tag 11"按鈕的時候屏幕上將顯示“SubView11”,而非“SubView12”。同時不管你點擊幾次該按鈕,始終只顯示“SubView11”。這樣可以看出來同一層級中獲取subview時候查找順序為index從小到大的原則,即位于相對下層的將首先被找到。
 
  其次我還在subview1中添加了tag均為13的subview13,同時向view中添加了tag也為13的subview2,運行程序點擊“Show Tag 13”按鈕,屏幕上將會顯示“SubView13”,而非“SubView2”。這可以驗證viewWithTag在搜索的時候遵循深度優先遍歷的原則,即會首先查找最下層的view并遞歸查詢其subview。
 
  綜上兩點我們可以看出來viewWithTag獲取subview的基本原則,即遵循深度優先,下層優先兩個原則。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩美女av在线免费观看| 久久久久五月天| 97久久精品人搡人人玩| 亚洲精品www久久久久久广东| 国产精品视频播放| 国产精品欧美风情| 一级做a爰片久久毛片美女图片| 日本91av在线播放| 欧美最近摘花xxxx摘花| 国产精品久久久精品| 亚洲精品电影网在线观看| 国产xxx69麻豆国语对白| 久久手机免费视频| 91在线|亚洲| 亚洲自拍偷拍福利| 久久久久久久久久久亚洲| 日韩视频免费大全中文字幕| 欧美日韩在线影院| 国产福利精品av综合导导航| 亚洲www永久成人夜色| 国产亚洲人成a一在线v站| 国产精品都在这里| 日韩av片电影专区| 国产亚洲欧美日韩精品| 亚洲欧洲美洲在线综合| 揄拍成人国产精品视频| 久久人人爽亚洲精品天堂| 成人国内精品久久久久一区| 一区二区三区天堂av| 亚洲视频一区二区三区| 91欧美日韩一区| 亚洲欧美日韩精品久久亚洲区| 色哟哟网站入口亚洲精品| 九色精品免费永久在线| 精品在线欧美视频| 国产精品久久久久国产a级| 国内外成人免费激情在线视频| 日韩免费看的电影电视剧大全| 日韩视频免费看| 久久久久久18| 精品久久久久久久久久国产| 日本久久久a级免费| 欧美黑人性生活视频| 久久久999精品视频| 久久亚洲精品中文字幕冲田杏梨| 国产成人av网| 久久久久中文字幕| 亚洲综合中文字幕68页| 欧美性猛交xxx| 亚洲欧洲在线播放| 精品人伦一区二区三区蜜桃网站| 热re91久久精品国99热蜜臀| 欧美成人激情视频免费观看| 成人两性免费视频| 久久免费精品视频| 亚洲国产古装精品网站| 国产在线视频不卡| 国产日韩欧美在线视频观看| 国产69久久精品成人看| 欧美日韩美女视频| 国产精品午夜视频| 自拍偷拍亚洲在线| 国产丝袜精品第一页| 亚洲国产精品大全| 久久亚洲精品成人| 日韩av网站导航| 一区二区三区在线播放欧美| 欧美日韩一区二区三区在线免费观看| 久久久久女教师免费一区| 亚洲人成77777在线观看网| 国产精品电影久久久久电影网| 欧美怡春院一区二区三区| 亚洲一区二区在线| 欧美激情亚洲综合一区| 国产欧美日韩精品丝袜高跟鞋| 亚洲性xxxx| 国产一区二区免费| 亚洲福利影片在线| 最新国产精品拍自在线播放| 国产精品av免费在线观看| 国产精品福利在线观看网址| 久久亚洲精品成人| 国产精品美女无圣光视频| 国产成人短视频| 日本sm极度另类视频| 一本一本久久a久久精品综合小说| 亚洲欧美日韩直播| 亚洲影视九九影院在线观看| 国产噜噜噜噜久久久久久久久| 国产免费成人av| 色综合五月天导航| 欧美性videos高清精品| 欧美片一区二区三区| 国产亚洲a∨片在线观看| 国产激情999| 伊人青青综合网站| 久久久亚洲国产天美传媒修理工| 国产精品久久久久久久久久| 国产精品网红直播| 欧美成人小视频| 尤物九九久久国产精品的分类| 亚洲人在线观看| 日韩亚洲精品电影| 亚洲精品白浆高清久久久久久| 精品高清美女精品国产区| 亚洲人成电影在线| 久久久综合av| 日韩av网站电影| 97涩涩爰在线观看亚洲| 亚洲免费精彩视频| 国内精品400部情侣激情| 国产日韩精品在线| 在线精品播放av| 欧美电影《睫毛膏》| 国产精品久久久久久久久久新婚| 久久视频免费在线播放| 国产欧美一区二区三区在线| 久久网福利资源网站| 成人av在线亚洲| 亚洲国产日韩欧美综合久久| 青青久久av北条麻妃黑人| 日韩在线观看免费全集电视剧网站| 国产精品www网站| 亚洲无亚洲人成网站77777| 成人久久精品视频| 欧美激情在线狂野欧美精品| 欧美激情视频三区| 亚洲在线一区二区| 精品亚洲夜色av98在线观看| 亚洲二区在线播放视频| 97超级碰在线看视频免费在线看| 国产亚洲xxx| 国产一区二区三区毛片| 日韩美女视频免费看| 中文字幕久热精品在线视频| 538国产精品一区二区在线| 奇门遁甲1982国语版免费观看高清| 中文字幕亚洲欧美一区二区三区| 国产黑人绿帽在线第一区| 亚洲第一中文字幕| 久久久久久91香蕉国产| 91免费福利视频| 亚洲一区二区在线播放| 一本久久综合亚洲鲁鲁| 亚洲大胆人体在线| 国产精品久久久久aaaa九色| 欧美激情网站在线观看| 精品亚洲国产视频| 久久国产色av| 国产精品黄页免费高清在线观看| 日韩在线观看免费全集电视剧网站| 国产亚洲精品久久久久久牛牛| 国产视频久久网| 中文字幕亚洲专区| 亚洲小视频在线| 日韩中文字在线| 国产一区二区三区高清在线观看| 欧美裸身视频免费观看| 精品久久久999| 国产在线观看91精品一区| 国产精品成人av性教育| 亚洲a∨日韩av高清在线观看| 韩国v欧美v日本v亚洲| 国产日韩在线播放|