我正在创建一些示例应用程序来了解可可中的视图导航、绑定等概念。这是场景:我有一个窗口,在 MainMenu.Xib 中有一个选项卡视图(2 个选项卡)。我在第一个选项卡中有一个文本字段,在第二个选项卡中有一个标签。我希望它们都反映相同的值,并且我想使用绑定来做到这一点。此外,我不想将提供给我的视图与选项卡视图一起使用。
这些是我已经完成的步骤。
每个选项卡视图项的视图在 applicationDidFinishLaunching: 方法中单独设置,使用以下代码:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
//initialize view controllers
view1=[[ViewTab1 alloc] initWithNibName:@"ViewTab1" bundle:nil];
view2=[[ViewTab2 alloc] initWithNibName:@"ViewTab2" bundle:nil];
//set views
[[[myTabView tabViewItems] objectAtIndex:0]setView:view1.view];
[[[myTabView tabViewItems] objectAtIndex:1]setView:view2.view];
}
- myTabView 是 AppDelegate 中 MainMenu.xib 的选项卡视图的出口引用。
- ViewTab1 是第一个视图控制器(和 xib)的名称。
- ViewTab2 是第二个视图控制器(和 xib)的名称。
ViewTab1 有一个单一的文本字段(和一个关联的标签)。我已将此绑定到 AppDelegate 中声明的变量(名称)。ViewTab2 有一个标签。我也将它绑定到 AppDelegate 中的同一个变量。
变量“name”在 AppDelegate 的 init 方法中初始化。
AppDelegate.h
....
NSString *name;
....
@property(strong) ViewTab1 *view1;
@property(strong) ViewTab2 *view2;
@property (assign) IBOutlet NSTabView *myTabView;
@property (strong) NSString *name;
....
AppDelegate.m
....
@synthesize myTabView;
@synthesize view1,view2;
@synthesize name;
....
- (id)init {
self = [super init];
if (self) {
name=@"dummy";
}
return self;
....
除此之外,我没有在我的程序中进行任何编码。
在 ViewTab1.xib 中,我得到一个对象并将其设为 AppDelegate 的实例,然后将 Application 对象(NSApplication)的委托引用连接到同一对象。(我希望这是获取 AppDelegate 对象的正确方法。)
我在 ViewTab2.xib 中做了同样的事情
然后我将 ViewTab1 中的文本字段和 ViewTab2 中的标签绑定到 AppDelegate 中的这个变量。
当我运行程序时,文本字段和标签都显示“虚拟”。但是当我更改文本字段中的值时,它不会反映在第二个选项卡(即 ViewTab2)的标签中。
请告诉我我做错了什么。