1

好的,我刚刚输入了整个问题,然后设法将其删除。叹。无论如何,标准披露是我到处搜索并将我的头撞在键盘上并且无法弄清楚这一点。

我正在基于实用程序应用程序模板(带有 MainViewController 和 FlipsideViewController)构建一个基本应用程序。旁注:我仍然不明白 MainView 和 FlipsideView 在这个方案中的目的,所以如果有人能解释它就不会太糟糕了:D

无论如何,在这两个视图的底部我想要一个工具栏。使用 IB 将其添加到给定视图很容易,但我希望工具栏有自己的控制器和模型,因为我想在两个视图中保持其状态一致。因此,我想从笔尖加载该视图,但似乎我做错了什么。我遵循了这里的建议:NSViewController and multiple subviews from a Nib但显然把它搞砸了,所以更深入的了解将不胜感激。

我做了以下事情:我创建了 ToolBarViewController,它基本上是空的,但它是 ToolBar.xib 的文件所有者。在 ToolBar.xib 内部,我有一个带有工具栏大小的框架的视图,并且在工具栏内部有一个工具栏。在 MainView.xib 中,我有一个相同大小的视图元素,它连接到下面代码中的 toolBarView...

在 MainViewController.h 中:

#import "ToolBarViewController.h"

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate, MKMapViewDelegate> {
 ...
 ToolBarViewController *toolBarViewController;
 IBOutlet UIView *toolBarView;
}

...
@property(nonatomic, retain) ToolBarViewController *toolBarViewController;
@property(nonatomic, retain) IBOutlet UIView *toolBarView;

在 MainViewController.m 中:

@synthesize toolBarViewController;
@synthesize toolBarView;

- (void)loadView
{
    [super loadView];
    toolBarViewController = [[ToolBarViewController alloc] initWithNibName:@"ToolBar" bundle:nil];
    [[toolBarViewController view] setFrame:[toolBarView frame]];
    [[self view] replaceSubview:toolBarView with:[toolBarViewController view]];
}

当我构建和运行时,我收到上面最后一行的警告,即“UIView”可能不会响应“replaceSubview:with”,并且在运行它时会引发以下异常:*** -[MainView replaceSubview:with:]: unrecognized选择器发送到实例 0x450c540

谁能解释我做错了什么?谢谢

4

2 回答 2

0

那是因为没有这样的 UIView 的 replaceSubview:with: (不过 Mac 上的 NSView 有类似的方法)。

请记住,Objective-C 警告通常是错误;)一般来说,我倾向于永远不会不处理它们,甚至将它们变成错误: http ://akosma.com/2009/07/16/objective-c-compiler-警告/

于 2010-01-08T17:44:49.013 回答
0

没有 [UIView replaceSubview:with:] 这样的方法。那是一个 NSView 方法。当你编译时,你应该得到一个警告。

要执行相同的操作,您需要使用[[self view] insertSubview:aboveSubview:]then [toolbarView removeFromSuperview]

也就是说,我不确定这是否是您想要弄乱工具栏的方式。我可能会尝试更多类似的东西:

self.toolbarItems = [toolbarViewController toolbarItems];
于 2010-01-08T17:48:02.050 回答