在.xib文件中建立连接。康威&希勒吉斯书

时间:2013-09-26 18:06:33

标签: iphone ios objective-c

来自康威& Hillegass书“Big Nerd Ranch Guide,iOS Programming”,第7章“UIViewController”。

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

程序编译但按下按钮后,标签不显示当前时间。 我怀疑我的错误是在我需要在文件所有者的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

1 个答案:

答案 0 :(得分:0)

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

在为按钮选择错误动作时犯了错​​误。不必选择“结束时结束”,而是选择“Touch Up Inside”选项。 这解决了这个问题。