2014-01-31 4 views
4

У меня есть VC RaceDayChecklistViewController.m, который является подклассом RaceDayChecklistViewControllerBase.m.Целевое действие называется дважды

В RaceDayChecklistVC.m добавлено целевое действие, которое вызывается дважды. nextOrNewButton - кнопка, нажатие которой я хочу вызвать действие «demo». Кроме того, checklistnavigationItem является элементом кнопки.

- (void)viewDidLoad 
{ 
    checklistTableViewBase=checklistTableView; 
    checklistNavigationItemBase=checklistnavigationItem; 
    nextOrNewButtonBase=nextOrNewButton; 

    [nextOrNewButton addTarget:self action:@selector(demo) forControlEvents:UIControlEventAllEvents]; 

} 

-(void) demo 
{ 
    RaceDayDataController *sharedController = [RaceDayDataController sharedDataController]; 

    if (sharedController.isSubmited) 
    { 
     [self.checklistnavigationItem setTitle:@"New"]; // 
    } 
    else 
    { 
     [self.checklistnavigationItem setTitle:@"Next"]; 
     [self showAlert]; 
    } 
} 

-(void) viewWillDisappear:(BOOL)animated 
{ 
    [nextOrNewButton removeTarget:self action: @selector(demo) forControlEvents:UIControlEventAllEvents]; 
} 

Что может быть причиной множественного вызова демонстрации действий? Является ли это базовым классом, каким-то образом?

руководство по применению.

+0

не его единственное место, где я использовал .. @mani –

ответ

5

UIButton генерирует несколько событий, нажимая: как правило, они UIControlEventTouchDownInside и UIControlEventTouchUpInside. Итак, если вы хотите обрабатывать прессу, вы должны поймать тот, который вам нужен (возможно, UIControlEventTouchUpInside), а не UIControlEventsAll.

0

Вы слушаете обо всех событиях, поэтому получаете все события.

Обычно для захвата события нажатия кнопки у нас было бы UIControlEventTouchUpInside.

Here is the option for you.

 typedef NS_OPTIONS(NSUInteger, UIControlEvents) { 
      UIControlEventTouchDown   = 1 << 0,  // on all touch downs 
      UIControlEventTouchDownRepeat  = 1 << 1,  // on multiple touchdowns (tap count > 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,  // sliders, etc. 

      UIControlEventEditingDidBegin  = 1 << 16,  // UITextField 
      UIControlEventEditingChanged  = 1 << 17, 
      UIControlEventEditingDidEnd  = 1 << 18, 
      UIControlEventEditingDidEndOnExit = 1 << 19,  // 'return key' ending editing 

      UIControlEventAllTouchEvents  = 0x00000FFF, // for touch events 
      UIControlEventAllEditingEvents = 0x000F0000, // for UITextField 
      UIControlEventApplicationReserved = 0x0F000000, // range available for application use 
      UIControlEventSystemReserved  = 0xF0000000, // range reserved for internal framework use 
      UIControlEventAllEvents   = 0xFFFFFFFF 
     }; 
+0

что является самым appropriate..Its в первый раз я использую target..can вы пожалуйста руководство .. я должен просто нажать на кнопку и двигаться .. –

+1

@Lalit_vicky Вы, вероятно, захотите использовать 'UIControlEventTouchUpInside'. –

+0

@Lalit_vicky Пожалуйста, вы можете использовать http://stackoverflow.com/questions/14856906/touchesbegan-touchesended-touchesmoved-for-moving-uiview –

2

Я могу видеть это

[nextOrNewButton removeTarget:self action: @selector(demo) forControlEvents:UIControlEventAllEvents]; 

Это означает, что при нажатии кнопки, touch up событие (UIControlEventTouchUpInside) триггер, так что будет срабатывать один раз. После этого произойдет touch down, так что он снова загорится UIControlEventTouchDownInside.

Таким образом, вы можете использовать это,

[nextOrNewButton removeTarget:self action: @selector(demo) forControlEvents:UIControlEventTouchUpInside]; 
0

Как установить UIControlEventAllEvents Вот почему, когда вы касаетесь кнопки она принимает два типа прикосновений, так что вы должны использовать только один тип Event либо UIControlEventTouchUpInside или UIControlEventTouchUpOutside. не

[nextOrNewButton addTarget:self action:@selector(demo) forControlEvents: UIControlEventTouchUpInside]; 
Смежные вопросы