使用XCode Storyboarding命名控件

时间:2012-03-05 07:42:47

标签: objective-c events uiimageview viewcontroller xcode-storyboard

当我从.NET过渡到Objective-C时,我正在学习控件和事件处理的基础知识。

我使用ARC和Storyboarding在XCode 4.2中创建了一个单视图项目。在Storyboard上,ViewController有一个UIImageView和一个UIButton。 UIImageView在Identity Inspector的“标签”条目中分配了名称“imgLock”。使用相同的技术命名按钮'btnToggle'。

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController {
  IBOutlet UIButton *btnToggle;
  IBOutlet UIImageView *imgLock;
}

- (IBAction) toggleImage;

@property (readonly, strong) UIButton *btnToggle;
@property (readwrite, strong) UIImageView *imgLock;
@end

ViewController.m

#import "ViewController.h"

@implementation ViewController
@synthesize btnToggle, imgLock;

BOOL imgState;

- (void) toggleImage {
    UIImage *img = [UIImage imageNamed: imgState ? @"Unlocked64" : @"Locked64"];
    imgState = !imgState;
    [imgLock setImage: img];
}

在故事板上,我按住Ctrl键将蓝色线从按钮拖动到图像,然后从结果上下文菜单中选择toggleImage

当我在toggleImage中设置断点并构建/运行项目时,我发现除了imgLock为0x0之外,一切都是应有的。从我的Windows时代开始,我想我希望控件能够实例化,因为它们“被放置在表单上”。

日志没有评论,除​​了杀死进程时的警告:警告:“/ SourceCache / gdb / gdb-1708 / src / gdb / macosx / macosx-nat-i​​nferior”第2184行出错。 c“in function”void macosx_kill_inferior_safe()“

1 个答案:

答案 0 :(得分:2)

  

在故事板上,我按住Ctrl键拖动按钮的蓝线到   图像,并从结果上下文菜单中选择toggleImage。

我不完全确定你在这里做了什么,但你需要在ViewController对象和每个按钮和图像之间拖动该行。按住“控制”并从代表视图控制器的图标拖动到按钮,然后选择btnToggle。再次按住“control”并从视图控制器拖动到图像,这次选择imgLock

接下来,您需要确保按钮已连接到目标和操作。该操作是在点击按钮时将发送的消息,并且目标指示将向其发送该操作消息的对象。要设置这些,请从按钮控制拖动到视图控制器(因为您希望视图控制器成为目标)。从弹出的列表中选择您的toggleImage:方法,以选择该方法作为操作。

  

从我的Windows时代起,我想我期待控制   实例化,因为它们“按原样放置在表格上”。

当你在故事板中创建它们时,你基本上是在实例化它们。就像.xib文件一样,storyboard文件包含序列化对象。从故事板加载视图控制器及其关联视图时,这些对象将“反序列化”回您可以使用的对象。视图控制器的出口是对故事板中其他对象的引用;这些引用将与对象一起创建,但您必须在故事板中将它们连接起来。