Программно присоединяемые обработчики событий - PullRequest
0 голосов
/ 09 ноября 2009

Итак, я пытаюсь программно присоединить обработчики событий к виджетам, которые я поместил в свое приложение iphone, используя:

<a href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIControl_Class/Reference/Reference.html#//apple_ref/occ/instm/UIControl/addTarget:action:forControlEvents:" rel="nofollow noreferrer">addTarget:action:forControlEvents</a>

Я добавил UISegmentedControl в Интерфейсном Разработчике, который выставляется через @property seg и в LoadView, у меня есть:

- (void)loadView
{
  [ super loadView ] ;

  //k after that attach our own event handlers
  [ seg addTarget:seg action:@selector(sliderEventIB) forControlEvents:UIControlEventAllEvents ];
}

sliderEventIB, просто говорит нам, что чувствует событие:

-(IBAction)sliderEventIB:(id)sender forEvent:(UIEvent*)event
{
  puts( "I feel you joanna" ) ;
}

но я получаю ошибку

ViewControllersTest[6744:207] *** -[UISegmentedControl sliderEventIB]:
<b>unrecognized selector sent to instance 0x3b21b30</b>

Есть идеи, что это не нравится здесь?

Ответы [ 3 ]

2 голосов
/ 10 ноября 2009

Кажется, вы просто забыли вставить двоеточие в addTarget:

[ seg addTarget:seg action:@selector(sliderEventIB:) forControlEvents:UIControlEventAllEvents ];

Это должен быть sliderEventIB: не sliderEventIB.

1 голос
/ 10 ноября 2009

Правильный код таков:

- (void)loadView
{
    [super loadView];
    [seg addTarget:self action:@selector(sliderEventIB:forEvent:) forControlEvents:UIControlEventAllEvents];
}
- (IBAction)sliderEventIB:(id)sender forEvent:(UIEvent*)event
{
    NSLog(@"I feel you joanna");
}

Обратите внимание, что метод имеет тот же селектор, что и зарегистрированный с помощью addTarget:action:forControlEvents.

0 голосов
/ 09 ноября 2009

Ну, UISegmentedControl не имеет метода 'sliderEventIB'.

Раздел метода addTarget спрашивает: «Кому я сообщаю, когда происходит событие?». В этом случае вы указали, что UISegmentedControl должен быть проинформирован, и он должен вызвать sliderEventIB для этого объекта. Вместо этого вы должны сказать

[seg addTarget:self action:@selector(sliderEventIB) forControlEvents: UIControlEventAllEvents]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...