IB的问题

时间:2010-10-12 15:04:20

标签: objective-c interface-builder pushviewcontroller

这是我关于SO的第一篇文章,所以嗨!

我也是Xcode和Obj-C的新手,所以不要太苛刻。

我正在关注斯坦福大学youtube.com/watch?v=L-FK1TrpUng的演示 出于某种原因,我遇到了错误。而不是从头开始我宁愿找出我出错的地方。

好的,所以这里。

我有两个视图控制器,我目前正在学习推送和弹出。

我的第一个视图控制器(firstViewController.h)标题:

    #import <UIKit/UIKit.h>       
@interface FirstViewController : UIViewController {
    }
     - (IBAction)pushViewController:(id)sender;
    @end

然后最初这是在实现文件(firstViewController.m)中设置的,就像这样

#import "firstViewController.h"
    @implementation FirstViewController
    - (IBAction)pushViewController:(id)sender{
}

此时我将IB从“文件所有者”拖动到“UIButton”并连接“pushViewController”

然而,在某处我收到了一些错误,我忽略了。

现在我将第二个视图控制器添加到我的firstViewController.m中,就像这样;

#import "firstViewController.h"
#import "secondViewController.h"

@implementation FirstViewController

    - (IBAction)pushViewController:(id)sender{
     SecondViewController *secondViewController = [[SecondViewController alloc] init];
     secondViewController.title = @"Second"; 
     [self.navigationController pushViewController:secondViewController animated:YES];
     [secondViewController release];
    }

我以前收到的错误似乎在某种程度上阻止了我从第二个ViewController笔尖中的textLabel拖动

(secondeViewController.h)

#import "firstViewController.h"
#import "secondViewController.h"


@implementation FirstViewController
- (IBAction)pushViewController:(id)sender{
 SecondViewController *secondViewController = [[SecondViewController alloc] init];
 secondViewController.title = @"Second";
 [self.navigationController pushViewController:secondViewController animated:YES];
 [secondViewController release];
}

所以我通过在firstViewController.xib中右击它来删除我原来的UIButton中的引用。

现在我无法重新创建从“文件所有者”到“UIButtons”,“pushViewController”插座的链接(它是一个插座还是一个动作?),也不能在我的secondViewControllers笔尖中创建从“文件所有者”到的链接'UILabel'。

任何帮助?

如果有人有兴趣,请在此处投放项目文件。 http://zer-o-one.com/upload/files/PushPop.zip

非常感谢。

1 个答案:

答案 0 :(得分:1)

插座是将一个对象连接到另一个对象的路径。动作是响应事件而在特定对象上调用的方法名称。可可传统上使用目标/动作进行相当多的通信,尽管现在这部分地被块所取代。

无论如何,你的项目:

firstViewController.xib错误地认为其文件所有者是类型为'firstViewController'的类。它实际上是'FirstViewController'类型 - 与大多数编程语言一样,Objective-C对类名称区分大小写。在Interface Builder中,打开firstViewControlller.xib,选择“文件所有者”,打开检查器并前往“i”选项卡,然后更正顶部的类名。完成后,尝试切换到连接选项卡(箭头指向右侧的选项卡),您应该看到它正确找到了您的班级和您的IBAction。然后,您应该能够控制拖动。

基本上相同的注释适用于secondViewController。

如果您感到好奇,Objective-C与例如C ++,因为所有类名在运行时都是已知的,并且可以从其名称的字符串版本实例化一个类。这就是XIB / NIB的加载方式。