0x2B——iPhone应用的基本交互

以下内容从《iPhone3开发基础教程》第三章作相应更改,以适应Xcode4.2。

首先,我们创建一个新的Single View Application项目,取名为Button Fun。这个名字也将是应用显示在iphone上的名字。我们的程序包含两个按钮和一个用于反应按钮状态的文本标签。而代码会通过某种方式与我们在Interface Builder中创建的元素进行交互。控制器类可以使用特殊的实例变量来引用storyboard中的对象,这个对象就是outlet(书上翻译为输出口)。

输出口是使用关键字IBOutlet声明的实例变量。另外,我们还需要返回类型是IBAction的成员方法,这类方法是个操作,会被Interface Builder上的某个控件触发。通常,操作方法的声明应如下所示:

- (IBAction) doSomething: (id) sender;

该方法实际上不返回任何值。

之后,我们就需要在ViewController.h中添加如下代码:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController {
UILabel *statusText;
}

@property (nonatomic, retain) IBOutlet UILabel *statusText;
- (IBAction) buttonPressed: (id) sender;
@end

其中,StackOverflow上建议把retain改成strong,涉及到内存管理,其实我也还不是太清楚。

之后我们需要将操作和输出口添加到实现文件,打开ViewController.m文件,如下所示:

#import "ViewController.h"

@implementation ViewController

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}

- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}

- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}


@end

这里比以往主要缺少一个dealloc函数,好像是因为会被自动释放内存?虽然我觉得这在手机上不大可能。

之后我们需要添加若干行代码

@synthesize statusText;

- (void)viewDidUnload
{
[super viewDidUnload];
self.statusText = nil;
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}

- (IBAction)buttonPressed:(id)sender
{
if (![sender isKindOfClass:[UIButton class]])
return;
NSString *title = [(UIButton *)sender currentTitle];
NSString *newText = [[NSString alloc] initWithFormat:@"%@ button pressed.", title];
statusText.text = newText;
newText = nil;
}

这样,title就会是按钮的名字了。

应用程序委托的两个文件的代码不需要修改,虽然它跟书上说的代码很不一样,但的确不用改。

然后打开storyboard,添加Label元素和两个Round Rect Button,布局的时候可以利用蓝色引导线对齐。

然后我们需要连接元素。

依旧在storyboard窗口,按住Ctrl键,然后点住下面的View Controller,鼠标再上移,可以看到蓝色的线,然后放到Label,应该会出现一个小灰色框,选择statusText,不要选view,不然应用就无法正常显示了。这样就把两个东西连接起来了。然后选择一个按钮,然后在右边会显示它的Sent Events,如果没显示的话上面的标签按钮(依次应该是Identity,帮助,布局框?,元素属性,视图和最后一个向右箭头,就是需要的那个。选择Touch Up Inside事件,点住右边的小圆圈,拖到下面的View Controller上,然后选择buttonPressed方法,这步骤和刚Label连接的过程是类似的,就是不用按住Ctrl键。

于是这个小应用就做完了。

另外,我们可以给这个应用添加一个图标,先做一个57*57的png格式的图片,然后添加到工程中。现在的工程中没有Resources文件夹,但是可以New Group一下,然后专门放资源,图标文件可以叫icon.png,也可以叫别的。然后打开.plist文件,有个Icon files,改成Icon file,然后右边双击,输入那个图标的名字,如果不输入,默认就会找icon.png了。

这样,我们就可以找到有自己图标的应用了。



posted @ 2011-11-23 15:30  cuero  阅读(424)  评论(0编辑  收藏  举报