在Interface Builder中,我可以连接自定义控制器中的按钮和AppDelegate中的操作吗?

时间:2011-02-21 04:15:56

标签: iphone uiviewcontroller interface-builder

在Interface Builder中,我可以连接自定义控制器中的按钮(在我的自定义NIB中)和我在MainView NIB中放入的操作方法(即AppDelegate)吗?

背景 - 在理解事物方面,我试图拥有两(2)个客户控制器(具有自己的视图),这样当iPhone应用程序启动时,它将启动View1。但是在View1上有一个Button,如果你按下它会将View1控制器/视图换成View2控制器视图。我希望能够理解AppDelegate如何为主窗口分配一个特定的View来显示哪个包含在我提供的自定义NIB /控制器中。

所以我认为我应该将交换视图的代码(类似于here)作为Application Delegate代码中的一个动作(为了更好或更坏)。 (即不在我的view1或view2控制器中)

无论如何,我发现在IB中从View1按钮的TOUCH_UP_INSIDE事件拖动到MainViewNIB似乎是不可能的。是不是可以这样做?所以,我正在尝试从一个NIB获取一个按钮来触发另一个NIB(控制器)中的动作方法。

3 个答案:

答案 0 :(得分:1)

我知道这个问题已经过时了,但我想我会为其他寻找这个答案的人注意这个问题。 AppDelegate不适合交换视图。您需要创建一个根视图控制器。如果您创建一个新的视图控制器,将其设置为AppDelegate中的根视图控制器,并将View 1 init内容添加到新的根视图控制器的“ViewDidLoad”部分,您将能够交换您喜欢的视图。您仍然需要创建一个协议并委托将消息发送回根视图控制器,但这里有很多线程向您展示如何执行此操作。祝你好运!

答案 1 :(得分:0)

基于我到目前为止看到的内容,在Interface Builder中似乎是不可能的。如果您同意,请告诉我。

我注意到其他人提出了一些替代方案,但为了对我提出的具体问题做出公正的判断,我认为我应该(暂时)提出这个答案......

答案 2 :(得分:0)

在.xib文件中,您只能在该.xib文件中引用的对象(“真实”对象,如按钮,标签等)或“代理”对象(如文件所有者)之间创建连接。

如果将.xib文件的所有者设置为app委托子类,并调用此代码加载nib:

[[NSBundle mainBundle] loadNibNamed:@"MyNib" owner:myAppDelegate options:nil];

然后,您的UI项和您的app委托子类之间的任何连接都将使用您的app delegate对象填充(但只有在加载时nil的IBOutlets才会被设置,loadNibNamed:owner:options:不会更改所有者对象中的非零IBOutlets。