加載帶有手勢(shì)識(shí)別器的XIB文件需注意哪些問(wèn)題
如果在你的應(yīng)用程序中需要檢測(cè)手勢(shì),比如點(diǎn)擊(tap)、二指撥動(dòng) (pinch)、拖移(pan)和旋轉(zhuǎn)(rotation),那么通過(guò)創(chuàng)建UIGestureRecognizer類來(lái)實(shí)現(xiàn)將十分簡(jiǎn)單。
接下來(lái)小編給大家分享加載帶有手勢(shì)識(shí)別器的XIB文件需主要的問(wèn)題。
首先新建一個(gè)繼承自UIView的類,并創(chuàng)建相應(yīng)的XIB文件
#import <UIKit/UIKit.h> @interface ZHDemoView : UIView + (instancetype)demoView; @end
提供一個(gè)類方法以供快速創(chuàng)建當(dāng)前類
在.m中實(shí)現(xiàn)類方法,通常從XIB中加載出來(lái)的是一個(gè)數(shù)組,所以用到了lastObject方法
+ (instancetype)demoView
{
NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"ZHDemoView" owner:nil options:nil];
return [nibArray lastObject];
}
在awakeFromNib中添加相應(yīng)的手勢(shì)
- (void)awakeFromNib
{
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(click)];
[self addGestureRecognizer:tap];
}
- (void)click
{
NSLog(@"%s", __func__);
}
另外,測(cè)試用的XIB長(zhǎng)這樣:

在根控制器添加一個(gè)這樣的View,運(yùn)行并點(diǎn)擊
結(jié)果是
2015-08-11 13:44:44.988 XIB
注意
[1797:362096] -[ZHDemoView click]
一切正常,接下來(lái)我們不在代碼中添加手勢(shì),直接在XIB中添加(之前添加手勢(shì)的代碼已清除):

運(yùn)行結(jié)果:
2015-08-11 14:02:12.747 XIB
注意
[1962:374487] -[UITapGestureRecognizer superview]: unrecognized selector sent to instance 0x7fe47af49c60
可以看到是消息發(fā)送錯(cuò)誤,UITapGestureRecognizer中沒(méi)有superview方法。
回到這張圖

我們可以看到Objects欄下方有手勢(shì)識(shí)別器和DemoView兩個(gè)對(duì)象,那么是否有可能是因?yàn)閄IB加載的對(duì)象錯(cuò)誤呢?
因?yàn)橹疤峁┑念惙椒ㄖ形覀兪褂玫氖莑astObject方法,這次我們使用firstObject試一試
更改類方法如下:
+ (instancetype)demoView
{
NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"ZHDemoView" owner:nil options:nil];
return [nibArray firstObject];
}
結(jié)果:
2015-08-11 14:13:16.847 XIB
注意
[2064:382058] -[ZHDemoView click:]
一切正常。
總結(jié):
從XIB加載出來(lái)的是一個(gè)對(duì)象數(shù)組,通常情況下,我們只需要用到一個(gè)對(duì)象,此時(shí)用firstObject或者lastObject皆可。但是當(dāng)你要使用手勢(shì)識(shí)別器時(shí),別弄錯(cuò)你取出的對(duì)象。建議不要在XIB中直接添加手勢(shì)識(shí)別器,通過(guò)代碼手動(dòng)創(chuàng)建更穩(wěn)妥和易于維護(hù)。
以上就是本文介紹加載帶有手勢(shì)識(shí)別器的XIB文件需注意的問(wèn)題,希望能夠幫助到大家。
相關(guān)文章
UIPageViewController實(shí)現(xiàn)的左右滑動(dòng)界面
這篇文章主要為大家詳細(xì)介紹了UIPageViewController實(shí)現(xiàn)的左右滑動(dòng)界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
iOS中大尺寸圖片的旋轉(zhuǎn)與縮放實(shí)例詳解
圖片縮小旋轉(zhuǎn)是我們?cè)陂_(kāi)發(fā)中經(jīng)常會(huì)遇到的一個(gè)功能,下面這篇文章主要給大家介紹了關(guān)于iOS中大尺寸圖片的旋轉(zhuǎn)與縮放的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧2018-09-09
iOS中FMDB數(shù)據(jù)庫(kù)之增刪改查使用實(shí)例
本篇文章主要介紹了iOS中FMDB數(shù)據(jù)庫(kù)之增刪改查使用實(shí)例,F(xiàn)MDB是一個(gè)輕量級(jí)的數(shù)據(jù)庫(kù),用于將網(wǎng)絡(luò)資源存儲(chǔ)在本地。2017-05-05
詳解iOS App中UITableView的創(chuàng)建與內(nèi)容刷新
這篇文章主要介紹了iOS App中UITableView的創(chuàng)建與內(nèi)容刷新,講解了UITableView一些基本的樣式與cell的設(shè)置及刷新,需要的朋友可以參考下2016-04-04
IOS UI學(xué)習(xí)教程之設(shè)置UITextField各種屬性
這篇文章主要為大家詳細(xì)介紹了IOS UI學(xué)習(xí)教程之設(shè)置UITextField各種屬性,感興趣的小伙伴們可以參考一下2016-03-03
兩種iOS調(diào)用系統(tǒng)發(fā)短信的方法
iOS調(diào)用系統(tǒng)的發(fā)短信功能可以分為兩種:1,程序外調(diào)用系統(tǒng)發(fā)短信。2,程序內(nèi)調(diào)用系統(tǒng)發(fā)短信。第二種的好處是用戶發(fā)短信之后還可以回到app。這對(duì)app來(lái)說(shuō)非常重要。2016-07-07
iOS UITableView 拖動(dòng)排序?qū)崿F(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了iOS UITableView 拖動(dòng)排序?qū)崿F(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09

