你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開辟中Subview的事宜呼應和獲得subview的辦法

iOS開辟中Subview的事宜呼應和獲得subview的辦法

編輯:IOS開發綜合

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的根本准繩,即遵守深度優先,基層優先兩個准繩。

【iOS開辟中Subview的事宜呼應和獲得subview的辦法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved