UIControlクラス

2010. 10. 21
●概要

UIControlは制御の基礎となるクラスで、ボタンやスライダなど、アプリケーションにユーザの意図を伝えるために使用されます。

UIControlのインスタンスを直接制御に使用することはできません。

その代わり全てのサブクラスについて、共通のインターフェイスと動作の構造体を定義します。

UIControlの主な役割は、アクションメッセージを準備するための基礎となる実装と、指定したイベントが発生した時に最初にターゲットにディスパッチするインターフェイスを定義することです。
(『Target-Action』の概要を参照)

また、(制御の有効や強調を決定などのための)制御状態の設定と取得をするメソッドと、(後でメソッドのグループのサブクラスによるオーバーライドのために)制御中にタッチの追跡を行うメソッドの定義を含みます。

ターゲット−アクションメカニズム

UIKitフレームワークのターゲット−アクションメカニズムの設計は、マルチタッチイベントモデルに基づいています。

iOSは、(マウスのクリックやドラッグの代わりに)ユーザの指(またはタッチ)により意図を伝達し、異なる接触をいつでも制御するマルチタッチがあります。

UIControl.hヘッダファイルは、『Control Events』で説明されているビットマスクの定数で、制御イベントを多数宣言しています。

いくつかの制御イベントは、コントロールの中と周囲にタッチする動作を指定しており、コントロールに指を降ろしてタッチする、コントロールの外から中にまたは中から外にドラッグするなど、様々なアクションの組み合わせがあります。

他の制御イベントとして、テキストフィールドに指を降ろしてタッチした時に、編集フェーズの開始が指定されています。

またUIControlEventValueChangedは、スライダなどのコントロール上の操作を連続した値の変化として受け取ります。

特定のアクションメッセージの場合は、指定した一つ以上の制御イベントをトリガとして、メッセージを送信することができます。

例えば、コントロールに指を降ろしてタッチするか中にドラッグした場合(UIControlEventTouchDown | UIControlEventTouchDragEnter)に、特定のターゲットに特定のアクションメッセージを送信することができます。

アクションメッセージを送信するためのコントロールの準備には、各ターゲット−アクションのペアごとにaddTarget:action:forControlEvents:の呼び出しを指定します。

このメソッドは、制御イベントに各ターゲット−アクションのペアを関連付けしたディスパッチテーブルを内部に構築します。

ユーザがコントロールにタッチした方法の中に、指定したイベントが一つ以上一致した場合は、UIControlがsendActionsForControlEvent:を送信します。

その結果UIControlはsendAction:to:from:forEvent:メッセージのUIApplicationにアクションを送信します。

UIApplicationはアクションメッセージのディスパッチポイントを中央に集め、アクションメッセージのターゲットにnilが指定されている場合は、アクションメッセージを処理するオブジェクトが見つかるまでレスポンダチェーンを逆上り、アプリケーションはファーストレスポンダにアクションを送信します。

つまり、アクションセレクタに対応するメソッドを実装するオブジェクトです。

UIKitは三つの異なる形体のアクションセレクタを提供します。

- (void)action
- (void)action:(id)sender
- (void)action:(id)sender forEvent:(UIEvent *)event

UIApplicationのsendAction:to:fromSender:forEvent:メソッドは、ターゲットを呼び出す時に二つのパラメータを送信します。

最後の二つのパラメータはアプリケーションのためのオプションで、呼び出し元(通常はUIControlオブジェクト)で任意のパラメータを削除するために追加されています。

サブクラス化の注意

UIControlをサブクラス化して拡張するのには、二つの基本的な理由があります。



●タスク

●アクションメッセージの準備と送信

– sendAction:to:forEvent:
– sendActionsForControlEvents:
– addTarget:action:forControlEvents:
– removeTarget:action:forControlEvents:
– actionsForTarget:forControlEvent:
– allTargets
– allControlEvents

●制御属性の設定と取得

  state    property
  enabled    property
  selected    property
  highlighted    property
  contentVerticalAlignment    property
  contentHorizontalAlignment    property

●タッチのトラッキングと再描画制御

– beginTrackingWithTouch:withEvent:
– continueTrackingWithTouch:withEvent:
– endTrackingWithTouch:withEvent:
– cancelTrackingWithEvent:
  tracking    property
  touchInside    property



●プロパティ



●インスタンスメソッド

addTarget:action:forControlEvents:

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents

ディスパッチテーブルの内部に特定のイベントのためのターゲットとアクションを追加します。

このメソッドは複数回呼び出すことができ、特定のイベントのために複数のターゲットとアクションのペアを指定することができます。

アクションメッセージに応じて、その順序でパラメータとしてセンダーとイベントをオプションで含めることができます。

target:アクションメッセージが送信されるオブジェクトを指定します。
nilの場合、レスポンダチェーンはアクションメッセージに応答できるオブジェクトを検索します。

action:アクションメッセージを識別するセレクタを指定します。
NULLにすることはできません。

controlEvents:アクションメッセージが送信されるコントロールイベントを、ビットマスクで指定します。
ビットマスク定数は『Control Events』を参照してください。



●定数

UIControlEvents

Control Events』に記載されているenum定数の型です。

typedef NSUInteger UIControlEvents;


Control Events

コントロールオブジェクトに対してすることができるイベントの種類です。

enum { 
    UIControlEventTouchDown= 1 << 0,
    UIControlEventTouchDownRepeat= 1 << 1,
    UIControlEventTouchDragInside= 1 << 2,
    UIControlEventTouchDragOutside= 1 << 3,
    UIControlEventTouchDragEnter= 1 << 4,
    UIControlEventTouchDragExit= 1 << 5,
    UIControlEventTouchUpInside= 1 << 6,
    UIControlEventTouchUpOutside= 1 << 7,
    UIControlEventTouchCancel= 1 << 8,
  
    UIControlEventValueChanged= 1 << 12,
  
    UIControlEventEditingDidBegin= 1 << 16,
    UIControlEventEditingChanged= 1 << 17,
    UIControlEventEditingDidEnd= 1 << 18,
    UIControlEventEditingDidEndOnExit= 1 << 19,
  
    UIControlEventAllTouchEvents= 0x00000FFF,
    UIControlEventAllEditingEvents= 0x000F0000,
    UIControlEventApplicationReserved= 0x0F000000,
    UIControlEventSystemReserved= 0xF0000000,
    UIControlEventAllEvents= 0xFFFFFFFF
}; 

UIControlEventTouchDown
コントロール内でのタッチダウンのイベントです。

UIControlEventTouchDownRepeat
コントロール内での繰り返しのタッチダウンイベントです。
このイベントは、UITouchのtapCountメソッドの値より1大きいです。

UIControlEventTouchDragInside
コントロールの矩形の内側で指をドラッグしたイベントです。

UIControlEventTouchDragOutside
コントロールの矩形の外側で指をドラッグしたイベントです。

UIControlEventTouchDragEnter
コントロールの矩形の内側へ指をドラッグしたイベントです。

UIControlEventTouchDragExit
矩形の内側から外側へ指をドラッグしたイベントです。

UIControlEventTouchUpInside
コントロールの矩形の内側に指がある、コントロール内でのタッチアップイベントです。

UIControlEventTouchUpOutside
コントロールの矩形の外側に指がある、コントロール内でのタッチアップイベントです。

UIControlEventTouchCancel
コントロールへの現在のタッチをキャンセルするシステムイベントです。

UIControlEventValueChanged
コントロールをタッチドラッグまたは他の操作によって、異なる値を連続して出力します。

UIControlEventEditingDidBegin
矩形に組み込まれているUITextFieldオブジェクトの編集セッションがタッチにより開始したイベントです。

UIControlEventEditingChanged
UITextFieldオブジェクトをタッチによって編集変更したイベントです。

UIControlEventEditingDidEnd
矩形から外れた場所のタッチにより、UITextFieldオブジェクトの編集セッションが終了したイベントです。

UIControlEventEditingDidEndOnExit
UITextFieldオブジェクトの編集セッションがタッチにより終了したイベントです。

UIControlEventAllTouchEvents
全てのタッチイベントです。

UIControlEventAllEditingEvents
UITextFieldオブジェクトに対する全ての編集タッチイベントです。

UIControlEventApplicationReserved
アプリケーションで使用できるコントロールイベントの値の範囲です。

UIControlEventSystemReserved
内部のフレームワークで使用するために予約したコントロールイベントの値の範囲です。

UIControlEventAllEvents
システムイベントを含む全てのイベントです。


Control State

enum {
    UIControlStateNormal= 0,
    UIControlStateHighlighted= 1 << 0,
    UIControlStateDisabled= 1 << 1,
    UIControlStateSelected= 1 << 2,
    UIControlStateApplication= 0x00FF0000,
    UIControlStateReserved= 0xFF000000
};

コントロールの状態を表します。

コントロールは一度に一つ以上の状態を持つことができます。

状態はコントロールに応じて異なって認識されます。

例えば、UIButtonインスタンスで(setImage:forState:メソッドを使って)一つの画像を表示する時に、通常状態と強調表示された異なる画像で構成される場合があります。

UIControlStateNormal
コントロールが通常またはデフォルトの状態です。
コントロールは有効ですが、選択も強調表示もされていません。

UIControlStateHighlighted
コントロールが強調表示の状態です。
コントロールがこの状態に入るのは、タッチに入る、トラッキングから出るまでの間、タッチを離す時です。
この値はhighlightedプロパティで、取得と設定ができます。

UIControlStateDisabled
コントロールが無効の状態です。
この状態は、コントロールが現在無効になっていることを示します。
この値はenabledプロパティで、取得と設定ができます。

UIControlStateSelected
コントロールが選択された状態です。
多くのコントロールは、この状態では動作や外観に影響を与えません。
しかし他のサブクラス(例えばUISwitchControl)には影響を与えます。
この値はselectedプロパティで、取得と設定ができます。

UIControlStateApplication
アプリケーションで追加したコントロール状態のフラグで利用できます。

UIControlStateReserved
フレームワーク内での使用に予約されているコントロール状態のフラグです。


UIControlState

typedef NSUInteger UIControlState;

コントロール状態の定数を表したビットマスクのタイプです。

この定数のリストは『Control State』で示されています。

stateプロパティで使う、現在の状態のコントロールのビットセットを取得に使用します。



参考文献

UIControl Class Reference






bose_soundlink_revolve
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
03 | 2017/04 | 05
Sun Mon Tue Wed Thu Fri Sat
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

bose_soundlink_revolve
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR