使用界面生成器设计视图

Posted

技术标签:

【中文标题】使用界面生成器设计视图【英文标题】:designing a view with interface builder 【发布时间】:2012-08-24 13:28:13 【问题描述】:

我是界面生成器的新手。

我想在界面生成器中设计一个视图。 我知道我可以通过“loadNibNamed”加载视图。

现在,假设视图中有两个按钮(或两个点击手势识别器),当这些按钮被触摸时,需要触发一些功能。 如何连接(?)触摸到我称之为“loadNibNamed”的viewController的某些功能?

该视图将是一个带有两个按钮(或点击手势识别器)的弹出视图 (PopUp view)。

【问题讨论】:

【参考方案1】:

您需要设置从界面构建器对象(按钮)到您的类的出口。

为此,您需要将调用“loadNibNamed”的类作为委托类。然后合成按钮,使其成为一个属性。

添加选择器后:

 [button addTarget:self action:@selector(buttonPressed)

forControlEvents:UIControlEventTouchUpInside];

更好的方法是为该特定视图编写一个新类。然后,如果您想在名为“loadNibNamed”的类中捕获事件,您可以将目标设置为其他内容:

[button addTarget:(UIMyClass)sender action:@selector(buttonPressed)
   forControlEvents:UIControlEventTouchUpInside];

那里应该有很多教程:) - 顺便说一句,您是否考虑过升级您的 xcode 并使用故事板?

--编辑:--

出现问题是因为您将编码与界面构建混合在一起。我认为您仍然需要为您的新视图创建一个视图控制器类,但您可以将选择器的目标更改为调用类。

在此处查看有关选择器的更多信息:@selector and other class (Objective-C)

这里有一个关于以编程方式将数据推送到新视图的类似问题:

Can we pass a parameter to view did load or view will appear of other class from a class

【讨论】:

感谢您的意见。我在哪里合成按钮?由于我没有制作与此视图一起使用的 viewController.. 我看不到可以在哪里声明按钮.. 我想肯定有很多教程,我看了看,但仍然感到困惑。代码 (addTarget:action:) 驻留在哪里? 非常感谢,但我不明白。 :( 这个怎么样?在代码中创建视图。在视图类中设置定义选择器并从 awakeFromNib 调用 addTarget:action:。让视图有一个委托,并从操作选择器中调用委托的方法。 不确定这是否可行,这取决于选择器在哪里以及它的目标是什么。但我想试试吧。【参考方案2】:

如果您是 IB 新手,则需要三个步骤。

    在您的 .h(头文件)文件中添加方法名称,即

    -(IBAction)som​​eMethod:(id) 发件人;

    保存修改后的 .h 文件。

    打开界面生成器。

    我相信在“工具”菜单下打开“文件所有者”窗口。

    Cntrl+单击文件所有者窗口下的文件所有者选项。 应该会出现一个黑色窗口,下面有一堆界面选项。 someMethod 旁边应该会出现一个黑色的小圆圈

    将那个黑色小圆圈(应该出现一条蓝线)拖到您希望方法连接到的按钮上。应该会出现另一个菜单。选择一个适当的动作(比如触摸或类似的东西)。重复第二个按钮。

    在 IB 中为每个按钮在 Properties 下的属性列表中给它们一个标签(我相信)。如果您需要“属性”窗口,请再次查看“工具”菜单。转到标签部分并为每个按钮指定一个不同的标签。 (1、2、3 ...等)。

    在 .m 文件中实现该方法。确保区分用户选择哪个按钮的操作,即 if (sender.tag == 1) ... else if (sender.tag == 2) ...

保存并运行。

结束。

【讨论】:

以上是关于使用界面生成器设计视图的主要内容,如果未能解决你的问题,请参考以下文章

使用 .xib 设计 Self-Sizing UITableViewCell,单元格不会在界面生成器中自行调整

界面生成器约束

您可以使用界面生成器在 xcode 中制作自定义视图吗?

Xcode将集合视图单元添加到界面生成器上的集合视图

IBDesignable - 排列通过界面生成器添加的子视图

在表格视图顶部添加按钮 - 界面生成器