手勢識別在IOS中占有非常重要的地位,手勢操作是移動設備的一個重要特征,極大地提高了移動設備的便利性,下面就讓武林技術(shù)小編帶你一起進入下文了解一下IOS中手勢識別器的XIB文件須知的操作步驟吧,希望對你學習這方面內(nèi)容有所幫助!
IOS中手勢識別器的XIB文件須知的操作步驟
首先新建一個繼承自UIView的類,并創(chuàng)建相應的XIB文件
#import@interface ZHDemoView : UIView+ (instancetype)demoView;@end
提供一個類方法以供快速創(chuàng)建當前類
在.m中實現(xiàn)類方法,通常從XIB中加載出來的是一個數(shù)組,所以用到了lastObject方法
+ (instancetype)demoView{ NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"ZHDemoView" owner:nil options:nil]; return [nibArray lastObject];} 在awakeFromNib中添加相應的手勢- (void)awakeFromNib{ UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(click)]; [self addGestureRecognizer:tap];}- (void)click{ NSLog(@"%s", __func__);}另外,測試用的XIB長這樣:

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

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

我們可以看到Objects欄下方有手勢識別器和DemoView兩個對象,那么是否有可能是因為XIB加載的對象錯誤呢?
因為之前提供的類方法中我們使用的是lastObject方法,這次我們使用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加載出來的是一個對象數(shù)組,通常情況下,我們只需要用到一個對象,此時用firstObject或者lastObject皆可。但是當你要使用手勢識別器時,別弄錯你取出的對象。建議不要在XIB中直接添加手勢識別器,通過代碼手動創(chuàng)建更穩(wěn)妥和易于維護。
以上就是本文介紹的IOS中手勢識別器的XIB文件須知的操作步驟,希望能夠幫助到大家,也希望大家繼續(xù)支持武林技術(shù)頻道!
新聞熱點
疑難解答
圖片精選