从不同的控制器调用IBAction的正确方法是什么?

时间:2011-10-05 18:31:53

标签: cocoa objective-c-2.0

这是关于客观c和可可

我遇到了一个问题而且不知道如何解决它。希望我能在这里找到答案,这对其他一些程序员也有帮助。

所以,我有一个包含4个元素的简单窗口:

  1. NSTextField - 设置值的第一个字段
  2. NSButton - 在第一个字段中设置值
  3. NSTextField - 设置值的第二个字段
  4. NSButton - 在第二个字段中设置值
  5. 这里是“控制器1”代码:

    #import "controller2.h"
    
    @interface controller1 : NSControl{
    IBOutlet NSTextField * text1;
    }
    -(IBAction)click:(id)sender;
    @end
    
    @implementation controller1
    -(IBAction)click:(id)sender
    {
    [text1 setStringValue:@"text1 changed"];
    
    // create controller 2 instance
    controller2 * c2 = [[[controller2 alloc] init] autorelease];
    // call first time using one way
    [c2 click:self];
    
    // call second time using another way
    [self sendAction:@selector(click:) to:c2];
    }
    @end
    

    和控制器2代码:

    @interface controller2 : NSControl{
    IBOutlet NSTextField * text2;
    }
    -(IBAction)click:(id)sender;
    
    @end
    
    @implementation controller2
    -(IBAction)click:(id)sender
    {
    [text2 setStringValue:@"text 2 changed"];
    NSLog(@"Test2");
    }
    @end
    

    当我点击button1时,我在控制器1中“点击” - 一切都很好,工作正常

    当我点击button2时,我在控制器2中“点击” - 一切都很好,工作正常

    但是如果我想点击button1并在控制器2中“点击”它就不起作用(

    任何人都可以帮忙吗?它似乎有一个非常简单的分辨率,但我不知道我做错了什么。

1 个答案:

答案 0 :(得分:0)

controller2 * c2 = [[[controller2 alloc] init] autorelease];

你正在创建一个全新的“controller2”(顺便说一句,类的名字错误 - 总是大写类名:“MyController”等)。您需要从Controller1到Controller2的IBOutlet。这样你就可以通过名字向它发送消息。

请记住:笔尖中的对象是“冻干”实例类。