#xcode #class #action
#xcode — код #класс #Экшен #xcode
Вопрос:
У меня есть два контроллера просмотра. В одном из них у меня есть a UITextField
внутри a 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
. и там, где был представлен код, который работал, это было с помощью addsubview . Не знаю, может ли это что-нибудь сказать.
Заранее спасибо 🙂
Комментарии:
1. Мое первоначальное предположение заключается в том, что либо
TextFieldText
и / илиViewcontroller1
равны нулю в момент выполненияaddTarget
вызова; Я бы сначала перепроверил их.
Ответ №1:
Ваш селектор неверен. С завершающим двоеточием в @selector(ApplyAllObjectsSettings:)
нужном вам методе не будет вызываться, потому что он не принимает аргументов. @selector(ApplyAllObjectsSettings:)
сильно отличается от @selector(ApplyAllObjectsSettings)
. Либо измените свой ApplyAllObjectsSettings
метод на this: - (void)ApplyAllObjectsSettings:(id)sender
, либо ваш селектор на this: @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];