Xcode: Почему этот код не вызывает действие в другом классе? - PullRequest
0 голосов
/ 10 октября 2011

У меня есть два контроллера представления. В одном из них у меня есть UITextField в пределах UITableViewCell. Я хочу вызвать действие в другом контроллере представления, когда редактируется UITextField. В - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

Я использую этот код для вызова действия:

[TextFieldText addTarget:Viewcontroller1 action:@selector(ApplyAllObjectsSettings:) forControlEvents:UIControlEventEditingChanged];

Действие в Viewcontroller1 и выглядит так:

- (void)ApplyAllObjectsSettings {
    NSLog(@"Test");
    // Test
}

Я вставил действие в файл .h.

Странно то, что раньше я использовал почти такой же код, и он работал нормально. Я думаю, единственное отличие состоит в том, что контроллер вида, в котором находится UITextfield, показан с Viewcontroller1 на presentmodalviewcontroller. и где был представлен работающий код, это было addubview. Не знаю, есть ли что сказать.

Заранее спасибо:)

1 Ответ

2 голосов
/ 10 октября 2011

Ваш селектор неверен.С конечным двоеточием в @selector(ApplyAllObjectsSettings:) требуемый метод не будет вызываться, потому что он не принимает аргументов.@selector(ApplyAllObjectsSettings:) очень отличается от @selector(ApplyAllObjectsSettings).Либо измените свой метод ApplyAllObjectsSettings на этот: - (void)ApplyAllObjectsSettings:(id)sender, либо свой селектор на: @selector(ApplyAllObjectsSettings).

Итак, либо сделайте следующее:

[TextFieldText addTarget:Viewcontroller1 action:@selector(ApplyAllObjectsSettings:) forControlEvents:UIControlEventEditingChanged];
// ...
- (void)ApplyAllObjectsSettings:(id)sender {
    NSLog(@"Test");
    // Test
}

Или это:

[TextFieldText addTarget:Viewcontroller1 action:@selector(ApplyAllObjectsSettings) forControlEvents:UIControlEventEditingChanged];
// ...
- (void)ApplyAllObjectsSettings {
    NSLog(@"Test");
    // Test
}

Из заглавной буквы синтаксиса видно, что вашей целью является имя класса.Параметр addTarget: должен быть экземпляром объекта, а не именем класса.

Viewcontroller1 *vc1 = [[Viewcontroller1 alloc] initWithBlahBlah...];
[TextFieldText addTarget:vc1 action:@selector(ApplyAllObjectsSettings:) forControlEvents:UIControlEventEditingChanged];
...