Xcode:为什么这段代码不会在另一个类中调用该操作?

时间:2011-10-10 17:51:28

标签: xcode class action

我有两个视图控制器。在其中一个中,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。不知道这有什么可说的。

提前致谢:)

1 个答案:

答案 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];