单击按钮显示NSView

时间:2013-12-02 07:45:26

标签: objective-c macos cocoa nsview

我试图编写一个绘制Sierpinski Carpet的程序,因此用户应该选择递归的深度并单击一个按钮,然后应该出现一个带有地毯的窗口。
但我是初学者,所以我不知道如何将按钮连接到具有参数 NSRect 的函数。

我有一个MyView类(NSView的子类)

- (void)drawRect:(NSRect)dirtyRect
{
    [super drawRect:dirtyRect];

    if (b)
    draw(0, 0, 600, 600, 4);
}

void draw (double x1, double y1, double x2, double y2, int n)
{
    if (n > 0)
    {
        NSRect rect0 = NSMakeRect (x1 + (x2 - x1)/3, y1 + (y2 - y1)/3, (x2 - x1)/3, (y2 - y1)/3);
        [[NSColor blackColor] set];
        NSRectFill(rect0);

        draw (x1                  , y1                  , x1 +   (x2 - x1)/3  , y1 +   (y2 - y1)/3  , n - 1);

        draw (x1                  , y1 +   (y2 - y1)/3  , x1 +   (x2 - x1)/3  , y1 + 2*(y2 - y1)/3  , n - 1);

        draw (x1                  , y1 + 2*(y2 - y1)/3  , x1 +   (x2 - x1)/3  , y2                  , n - 1);

        draw (x1 +   (x2 - x1)/3  , y1 + 2*(y2 - y1)/3  , x1 + 2*(x2 - x1)/3  , y2                  , n - 1);

        draw (x1 + 2*(x2 - x1)/3  , y1 + 2*(y2 - y1)/3  , x2                  , y2                  , n - 1);

        draw (x1 + 2*(x2 - x1)/3  , y1 +   (y2 - y1)/3  , x2                  , y1 + 2*(y2 - y1)/3  , n - 1);

        draw (x1 + 2*(x2 - x1)/3  , y1                  , x2                  , y1 +   (y2 - y1)/3  , n - 1);

        draw (x1 +   (x2 - x1)/3  , y1                  , x1 + 2*(x2 - x1)/3  , y1 +   (y2 - y1)/3  , n - 1);
    }
}

- (BOOL) isFlipped { return YES; }

我还有一个NSTextField *深度(这是一个IBOutlet),用户应该输入递归的深度

谢谢你的回答!:)

1 个答案:

答案 0 :(得分:0)

您不能将任何参数传递给连接到UIButtons的方法(您可以做的最多就是传递一个int,使用button.tag = 42)。 所以我的建议是将你的UIButton连接到这样的方法,

- (IBAction)goButton:(id)sender {
    // Here you get the level of recursion that the user entered in the UITextField.
    NSString *recursionLevel = self.recuersionLevelOutlet.text; 

    // And do whatever you need to do with it.
    ...
}

要将UIButton连接到视图,如果您不确定,请执行以下操作。

1)打开屏幕的.xib文件。

2)按住选项并单击其名称打开.m文件(这将在侧窗格中打开)。

3)在按住 control 的同时,单击UIButton并拖动到@interface YourViewController()和@ .nd文件中的@end之间的空白区域。