【问题标题】:How call in -(IBAction)如何调用 -(IBAction)
【发布时间】:2015-03-21 20:19:24
【问题描述】:

我是 Objective-c 的新手。 需要制作一个按钮链接,它将在新窗口中打开。为此,我需要执行 IBAction 来创建一个新窗口。 这个添加 WebView :

- (ERBrowser *)addWebView:(NSURL *)url{
    for (NSView *view in browserViews)
        [view setHidden:true];
    ERTabModel *newModel = [[ERTabModel alloc] init];
    NSTabViewItem *newItem = [[NSTabViewItem alloc] initWithIdentifier:newModel];
    [tabView addTabViewItem:newItem];
    [tabView selectTabViewItem:newItem];
    ERBrowser *browserView = [[ERBrowser alloc] initWithFrame:mainView.frame];
    [browserView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
    [mainView addSubview:browserView];
    [browserViews addObject:browserView];
    [browserView setUIDelegate:self];
    [browserView setFrameLoadDelegate:self];
    if (url)
        [[browserView mainFrame] loadRequest:[NSURLRequest requestWithURL:url]];
    return browserView;
}

此按钮链接:

- (IBAction)bookmarkButton:(NSButton*)sender
{
    ERBrowser *browserView = [browserViews objectAtIndex:[tabView indexOfTabViewItem:[tabView selectedTabViewItem]]];
    [[browserView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[sender alternateTitle]]]];
    [self addNewTab:(id)];

这个 IBAction 添加新标签:

- (IBAction)addNewTab:(id)sender {

    [self addWebView:(NSURL *)];
}

我无法理解这是一个原因 addWebView [self addWebView:(NSURL *)]; 以及如何添加addNewTab [self addNewTab:(id)];

请解释一下怎么做?

【问题讨论】:

  • IBAction 是编译器识别的特殊关键字。它用于识别在编辑 NIB 时可以选择为“操作”的方法。它没有其他功能/意义,而且,如果没有在 NIB 编辑器中“链接”,它根本没有任何作用。
  • 谢谢你,我能理解。这里的问题是完全不同的。我需要这个 IBAction 传递函数,但我不明白如何将它传递给当前案例。你什么时候得到这样的静态 URL [self addWebView:[NSURL URLWithString:@"http://example.com"]]; 我不明白如何为另一个函数调用非静态 URL [self addWebView:[NSURL URLWithString:HERE WOT WHRITE]];
  • “IBAction 传递函数”是什么意思? IBAction 与访问 URL 有什么关系?
  • 我需要打开一个新选项卡 addNewTab 面板,添加到它并打开导致它的 WebView url。就像我在 NSTextField 中输入 URL 一样,它会在新窗口中打开并加载我写的 url
  • 抱歉这个问题被取消了。我做错了一切,已经明白如何做到这一点。感谢您的帮助。

标签: objective-c macos cocoa ibaction


【解决方案1】:

语法(type),例如(NSURL *),在方法声明中定义了参数的类型,例如:

- (ERBrowser *)addWebView:(NSURL *)url

声明一个方法addWebView:,它接受一个NSURL *类型的参数,并且在该方法中使用名称url来引用参数。

在一个表达式中,语法(type)是一个cast操作,一个改变其子表达式的静态类型的操作。例如:

(double)3

采用整数表达式 3 并将其转换为 double 值。

在你的方法调用中:

[self addWebView:(NSURL *)];

您正在调用 addWebView: 并将其作为参数传递给表达式的结果:

(NSURL *)

这是转换表达式的一半 - 你没有提供任何值来转换。因此出现错误。

您需要一个NSURL * 类型的 传递给addWebView:,从您的代码中,该值将是您希望加载的页面的URL。你必须决定从哪里获得它。

HTH

【讨论】:

  • 抱歉这个问题被取消了。我做错了一切,已经明白如何做到这一点。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
相关资源
最近更新 更多