UILabel でタッチされたことを検出する : Objective-C プログラミング
PROGRAM
UILabel でタッチされたことを検出する
UILabel は、標準ではタッチされたことを検出できない様子です。
UILabel でタッチされたことを検出するには、UILabel の派生クラスを作成して、そこで touchesBegain:withEvent: 等をオーバーライドします。
このとき、UILabel は既定では userinteractionEnabled が NO に設定されるようなので、これを YES に設定するのも忘れないようにします。
Interface Builder でそれにチェックが入っていても、プログラム側で YES に設定しないといけないところに注意します。
この辺りに考慮して、UILabel でタッチを検出するコードは、次のような感じになりました。
EzSampleLabel.h
// クラスは UILabel から派生させます。
#import <UIKit/UIKit.h>
@interface EzSampleLabel : UILabel
@end
EzSampleLabel.m
// クラスは UILabel から派生させます。
#import "EzSampleLabel.h"
@implementation EzSampleLabel
// Objective-C コードからのインスタンス化の場合は init や initWithFrame: で初期化します。
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
// UILabel で touchesBegan:withEvent: 系をハンドルするには、userInteractionEnabled を YES にする必要があります。
self.userInteractionEnabled = YES;
}
return self;
}
// Storyboard や NIB からのインスタンス化の場合は initWithCoder: で初期化します。
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self)
{
// UILabel で touchesBegan:withEvent: 系をハンドルするには、userInteractionEnabled を YES にする必要があります。
self.userInteractionEnabled = YES;
}
return self;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// ここで、タッチが開始されたときの処理を記載します。
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
// ここで、タッチが終了したときの処理を記載します。
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
// ここで、タッチがキャンセルされたときの処理を記載します。
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
// ここで、タッチが移動されたときの処理を記載します。
}
このような UILabel の派生クラスを作成して使用することで、タッチを検出することができました。
Interface Builder でこのクラスを使用したい場合には、まずは UILabel を貼り付けた上で、その "Identity Inspector" の "Custom Class" で、Class を UILabel からここでは EzSampleLabel に変更します。
なお、Interface Builder で作成した UI が読み込まれるときには、各コンポーネントは initWithCoder: で初期化されるので、必要な初期化はそこで行います。
ちなみに Outlet などの連結は initWithCorder: が終わった後に行われるようなので、それを踏まえた初期化をしたいような場合には awakeFromNib をオーバーライドしてそこで行うようにします。
このような辺りを踏まえて作成した サンプルコード を GitHub にアップロードしてありますので、必要であればそちらもご覧ください。
[ もどる ]