0

または同様UIControlEventsのものから変数を作成することは可能ですか?NSStringしたがって、たとえば、変数のtypedefの1つと同じとNSString呼ばれるがあります。UIControlEventTouchUpInsideUIControlEvents

すべての助けをありがとう!

4

3 に答える 3

1

これがどのように正しく機能するかを理解している場合、UIControlEventsは次のように列挙されます。

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
};

繰り返しになりますが、これは私がこれを正しく理解している場合です。間違っている場合は修正してください。ただし、可変整数を作成して、次のように制御イベントに渡すことができるはずです。

    int myVariable = 64;
    [myButton addTarget:self action:@selector(mySelector) forControlEvents:myVariable];

ビット単位の左シフトの説明については、このリンクを参照してください

于 2012-08-16T18:51:00.520 に答える
1

ある辞書から別の辞書にマップするには、独自の辞書を作成する必要があります。

NSDictionary * const controlEventTypesFromStrings = @{
     @"UIControlEventTouchDown" : @(UIControlEventTouchDown),
     @"UIControlEventTouchDownRepeat" : @(UIControlEventTouchDownRepeat),

     //etc.

これはまだ新しいClangリテラル構文です; もちろん、古い/標準を使用して辞書を作成することができます[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInteger:UIControlEventTouchDown], @"UIControlEventTouchDown", ...

NSNumber次に、文字列を使用して、辞書からを取得します。

NSNumber * eventTypeNum = controlEventTypesFromStrings[stringDescribingControlEvent];
UIControlEvents eventType = [eventTypeNum unsignedIntegerValue];

新しい添え字構文を使用していない場合は、をNSNumber介して取得します。objectForKey:

于 2012-08-16T18:51:31.320 に答える
0

UIControlEventsビットマスクのビットを説明する簡単なコードを次に示します。

- (NSString *)describeEvents:(UIControlEvents)event {
    NSDictionary *events = @{@0: @"UIControlEventTouchDown",
                             @1: @"UIControlEventTouchDownRepeat",
                             @2: @"UIControlEventTouchDragInside",
                             @3: @"UIControlEventTouchDragOutside",
                             @4: @"UIControlEventTouchDragEnter",
                             @5: @"UIControlEventTouchDragExit",
                             @6: @"UIControlEventTouchUpInside",
                             @7: @"UIControlEventTouchUpOutside",
                             @8: @"UIControlEventTouchCancel",

                             @12: @"UIControlEventValueChanged",
                             @13: @"UIControlEventPrimaryActionTriggered",

                             @16: @"UIControlEventEditingDidBegin",
                             @17: @"UIControlEventEditingChanged",
                             @18: @"UIControlEventEditingDidEnd",
                             @19: @"UIControlEventEditingDidEndOnExit"};

    NSMutableString *result = [[NSMutableString alloc] init];
    for(int i = 0; i<sizeof(UIControlEvents) * CHAR_BIT; i++) {
        if((event & ((NSUInteger)1 << i)) != 0) {
            NSString *eventName = [events objectForKey:[NSNumber numberWithInt:i]];
            if(!eventName)
                eventName = [NSString stringWithFormat:@"%i", i];

            if(result.length > 0)
                [result appendString:@", "];
            [result appendString:eventName];
        }
    }

    return result;
}

出力例:

[self describeEvents:UIControlEventTouchCancel] // UIControlEventTouchCancel

[self describeEvents:UIControlEventAllTouchEvents] // UIControlEventTouchDown, UIControlEventTouchDownRepeat, UIControlEventTouchDragInside, UIControlEventTouchDragOutside, UIControlEventTouchDragEnter, UIControlEventTouchDragExit, UIControlEventTouchUpInside, UIControlEventTouchUpOutside, UIControlEventTouchCancel, 9, 10, 11

[self describeEvents:UIControlEventAllEvents] // UIControlEventTouchDown, UIControlEventTouchDownRepeat, UIControlEventTouchDragInside, UIControlEventTouchDragOutside, UIControlEventTouchDragEnter, UIControlEventTouchDragExit, UIControlEventTouchUpInside, UIControlEventTouchUpOutside, UIControlEventTouchCancel, 9, 10, 11, UIControlEventValueChanged, UIControlEventPrimaryActionTriggered, 14, 15, UIControlEventEditingDidBegin, UIControlEventEditingChanged, UIControlEventEditingDidEnd, UIControlEventEditingDidEndOnExit, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
于 2018-11-08T13:05:44.147 に答える