【问题标题】:Xcode iPad storyboardXcode iPad 故事板
【发布时间】:2013-05-15 07:30:08
【问题描述】:

所以我正在查看一个 iPad Objective-C Xcode 项目的源代码,我是新手,无法弄清楚发生了什么。

所以我正在查看文件 MainStoryboard_ipad.storyboard,它显示了所有各种按钮和内容,就像它们在实际 iPad 屏幕上显示的一样。

如何通过单击特定按钮时执行某些操作的方法“链接”这些图形按钮中的每一个?程序 _.h/m 中还有另外两个文件,它们似乎包含与按钮相关的方法,但我不知道具体如何。

这里有人可以解释这个过程或给我一个链接(非常清晰易懂)的指南吗?

【问题讨论】:

  • 这需要一点解释,所以最好的办法是在 Youtube 或 Pluralsight 之类的地方观看一些有关 iOS / XCode 的视频教程:pluralsight.com/training
  • 您通常在情节提要中右键单击您的插座(按钮等)并将其拖到 .h 文件中

标签: objective-c xcode ipad model-view-controller storyboard


【解决方案1】:

是的,这是我在学习教程之前遇到的关键问题之一。我不认为这对于刚刚涉足应用程序开发的经验丰富的程序员来说没有很好的记录。

通常的方法是在相关视图控制器类(分别为UIViewController 子类或UITableViewController)的.h 文件中声明对象类型的属性(即UIButton)。添加关键字IBOutlet 是关键。

关键字使 Interface Builder(IB;现在是您的故事板编辑器)能够识别那些应该链接到在 IB 中创建和维护的 UI 项的属性。您可以通过从连接检查器(IB 视图中的右侧窗格,窗格的选项卡栏上最右侧的图标,圆圈中带有箭头的那个)拖动一条线来链接此参考插座到预览中的实际对象(中心窗格)或在视图层次视图中。

在 .h 文件中(以及在 .m 文件中,如果您在那里合成它)您的连接由声明左侧圆圈中的一个点确认。当属性未连接时,它是一个空圆圈。当属性未标记为IBOutlet 时,根本没有圆圈。

现在,当您从视图控制器内部(或没有 - 可能但不推荐)访问属性时,在大多数方法(viewDidLoad 和 follwonig 方法)中,它应该不同于 nil。您可以获取或设置值,通过设置它们实际上会更改屏幕上相关的 UI 项。

很多 UI 项都是控件(UIControl 的子类,例如 UIButton)并分配了动作。通过调用一个动作,控件将消息发送给它的控制器,表明用户做了一些感兴趣的事情。用户可能更改了 UISwitch 的值或按下了 UIButton。 这与属性非常相似。声明一个方法。不再需要在 .h 中这样做,但我仍然遵循这种模式。开始输入- (IBAction) someName,自动完成将引导您完成。您可以将(IBAction) 视为(void) 的同义词,但它告诉xcode IDE 这应该作为操作链接到控件。 IBAction 接收一个类型为 (id) 或 (UIView) 或 (UIControl) 的参数。 (我不太确定实际类型)。关键是它接收到对执行操作的控制实例的引用 - 发送者。典型模式:

-(IBAction) myButtonWasPressed:(UIButton *)sender; 

你可以写一些关于在这个阶段将它输入到 UIButton 是否明智的书籍。但是,它可以工作,但您应该在方法中进行测试,并确保它确实是UIButton(例如,通过使用isKindOfClass:[UIButton class]),然后再访问 UIButtons 独有的任何属性或方法。如果您只是对调用的 IBAction 做出反应并且根本不访问发件人,那么您可能会忽略发件人甚至省略参数。 我认为以下内容也应该起作用: -(IBAction) myButtonWasPressed;

当然,您需要在 .m 文件中实现该方法。

您可以通过在 IB 中拖动一条线,以与属性类似的方式将此操作链接到控件。如果是按钮,您将被要求将其分配给事件。对于按钮,touchUpInside 事件是不错的选择。如果您发现自己有理由这样做,您可以对许多事件执行相同的操作。 (想不出任何理由,但效果很好)。

【讨论】:

  • 感谢您的回答!这非常有用且内容丰富。
猜你喜欢
  • 1970-01-01
  • 2013-05-12
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 2013-11-16
相关资源
最近更新 更多