在 .xib 文件中建立连接。康威和希勒加斯的书

Posted

技术标签:

【中文标题】在 .xib 文件中建立连接。康威和希勒加斯的书【英文标题】:Making connections in .xib file. Conway & Hillegass book 【发布时间】:2013-09-26 18:06:33 【问题描述】:

来自 Conway & Hillegass 的书“Big Nerd Ranch Guide, ios Programming”,第 7 章“UIViewController”。

我们创建一个有两个视图,两个 UIViewControllers 的应用程序。一个视图是我们在前面章节中以编程方式创建和连接的 UIViewController,另一个视图我们应该在 xib 文件中创建并与文件所有者建立必要的连接。 自定义视图应该显示一个标签和一个按钮。点击按钮后,标签应显示当前时间。

程序编译,但按下按钮后,标签不显示当前时间。 我怀疑我的错误是在我需要在 xib 文件中设置与文件所有者的连接时。 这是我所做的: 我控制单击文件的所有者,选择“Received Actions: showCurrentTime”并将其拖到按钮上。然后选择:“结束时结束”。 我控制单击文件的所有者,选择“Outlets:timeLabel”并将其拖到标签上。

谁能发现错误?

代码如下:

TimeViewController.h:(自定义视图的UIViewController)

#import <Foundation/Foundation.h>

@interface TimeViewController : UIViewController

IBOutlet UILabel *timeLabel;
-
(IBAction)showCurrentTime:(id)sender;

@end

TimeViewController.m:

#import "TimeViewController.h"

@implementation TimeViewController


- (IBAction)showCurrentTime:(id)sender

NSDate *now = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setTimeStyle:NSDateFormatterMediumStyle];
[timeLabel setText:[formatter stringFromDate:now]];


@end

HypnoAppDelegate.m:

#import "HypnoAppDelegate.h"
#import "HypnosisViewController.h"
#import "TimeViewController.h"

@implementation HypnoAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

//....creating an instance of our UIViewController and setting it as a root view. This is          an instance of custom view we've created programmatically.  
HypnosisViewController *hvc = [[HypnosisViewController alloc] init];

TimeViewController *tvc = [[TimeViewController alloc] init];
[[self window] setRootViewController:tvc];

self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;

- (void)applicationWillResignActive:(UIApplication *)application


- (void)applicationDidEnterBackground:(UIApplication *)application


- (void)applicationWillEnterForeground:(UIApplication *)application


- (void)applicationDidBecomeActive:(UIApplication *)application


- (void)applicationWillTerminate:(UIApplication *)application

 

@end

【问题讨论】:

您是否至少检查过(通过调试器)单击按钮时是否调用了 showCurrentTime?头文件中的 showCurrentTime 也缺少“-”符号(现在我看到它就在它上面,但不确定这是否会导致问题)。 感谢参与。我在为按钮选择错误选项时发现了问题。我在下面添加了答案。 【参考方案1】:

在将此代码与本书提供的解决方案进行比较时,我发现了错误。 与文件所有者建立连接时,.xib 文件中出现错误。不幸的是,书中没有关于如何正确执行此操作的信息。

错误是为按钮选择了错误的操作。必须选择“Touch Up Inside”选项,而不是选择“Did end on ending”。 这解决了这个问题。

【讨论】:

是的,当我读到你的帖子时,“结束时结束”对我来说听起来有点奇怪.. 我认为最简单的按下按钮的动作是下拉菜单中的第一个动作。唉。

以上是关于在 .xib 文件中建立连接。康威和希勒加斯的书的主要内容,如果未能解决你的问题,请参考以下文章

Xib的连接问题和创建的网点

无法访问xib文件?

UIView 和 XIB 连接。正在显示吗?

xib的简单使用

为精简版和完整版处理不同的 xib 文件

为啥我必须在自定义 NIB / XIB 中连接 IBOutlet 两次?