我有两个视图控制器。在其中一个中,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
显示的。并且工作的代码被提交的地方是addsubview。不知道这有什么可说的。
提前致谢:)
答案 0 :(得分:2)
你的选择器错了。使用@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];