第3章 处理基本交互
1.iOS应用程序委托
委托是负责为另一个对象处理特定事情的类。
通过应用程序委托,我们可以在预先定义的时间为UIapplication处理事情。
每个iPhone应用程序都有一个且仅有一个UI application实例,负责应用程序的运行循环以及处理各种应用程序级功能,如将输入发送给适合的控制器类。
UIapplication是uikit的标准部分,它主要在后台处理任务,因此一般不需要担心它。
但是,在应用程序执行过程中明确制定的时间内,UIapplication将调用特定的委托方法。
例如,如果需要在程序退出之前触发某段代码,可以在应用程序委托中实现applicationWillTerminate:方法,并将终止代码置于其中。
这种委托可以让应用程序实现常用的应用程序级行为,而不需要继承UIapplication,或了解他的任何内部机制。
2.当UIViewController的某个实例或某个子类被实例化时,它将被告知从一个nib文件中初始化自身。在我们所使用的模版中,将从nib文件xxx.nib加载xxxviewcontroler类。
这一步是自动完成的,我们无需执行任何操作,它是我们选择的项目模板的一个controller类。
由于mainwindow.xib文件包含一个表示xxxviewcontroller的图标,因此应用程序在启动时将自动创建一个xxxviewcontroller实例。
此后,该实例会自动将xxxviewcontroller.xib加载到内存中并成为该文件的所有者。
viewcontroller.xib的file‘s owner 是view controller类的一个实例。
3.label与文本绑定
按下control键,单击nib主窗口的file‘s owner 图标,并按住鼠标按钮,从file‘s owner 图标拖向view窗口。
此时应出现一条蓝色引导线。继续拖动鼠标,直到光标位于view窗口的标签之上。松开鼠标,就会弹出一个小菜单,选择要连接的输出口。
4。给按钮指定操作
选中按钮,打开connection inspector连接检查器。在event栏下看到触发操作的所有事件列表。选中你所要指定操作右侧的小圆圈,点击并拖动
到file‘s owner 图标,松开鼠标,弹出小菜单,选择按钮指定操作。
第4章 更丰富的用户界面
5.通过触摸背景关闭键盘
视图控制器的view属性,它继承自UIviewcontroller。这个view属性对应与nib文件中的view图标。此属性指向nib文件中一个UIview实例,该实例充当着用户界面中所有项的容器。它在用户界面中没有外观,但涵盖了整个iPhone窗口,位于所有其他用户界面对象“之下”。它有时称为nib文件的容器视图,因为他的主要用途是持有其他视图和控件。该容器时我们的用户界面的背景。
第一步:将视图控制器的view属性更改为指向UIview类对象,UIcontroller是UIview的子类,改为UIcontroller后将能够出发操作方法。选中view图标,打开身份检查器,将class值该为UIcontroller。
第二步:定义方法。例如xxxviewcontroller.h文件中定义方法:
- (IBAction)backgroundTap:(id)sender;
第三步:.m 中的方法实现如下:
-(IBAction)backgroundTap:(id)sender
{
[nameField
resignFirstResponder];
[numberField
resignFirstResponder];
}
第四步:打开连接检查器,从touch down事件拖到file‘s owner图标上,然后选择backgroundTap:操作。
6.实现操作表和警告
操作表和警报都用于向用户提供反馈。
操作表用于迫使用户在两个或更多项之间进行选择,从底部弹出。用户只有单击一个按钮之后才能继续使用应用程序。它通常用于确认潜在的危险或不能撤销的操作,如删除一个对象。
警告以蓝色圆角矩形的形式出现在屏幕中央。也迫使用户在继续使用应用程序之前作出响应。它更多的用于通知用户发生了一些重要或不正常的事情。它可能显示为单个按钮,也可以显示多个按钮。
操作表和警告都适用委托。为了让控制器类充当操作表的委托,控制器类需要遵从UIactionsheetDelegate协议。
这需要在类声明的超类之后的尖括号中添加协议名称。
@interface Hello_WorldViewController :
UIViewController
<UIActionSheetDelegate> {
调用操作表的操作:
- (IBAction)buttonPressed {
UIActionSheet *actionSheet = [[UIActionSheet
alloc]
initWithTitle:@"Are you sure?"
delegate:self
cancelButtonTitle:@"No Way!"
destructiveButtonTitle:@"Yes, I’m Sure!"
otherButtonTitles:nil];
[actionSheet
showInView:self.view];
[actionSheet
release];
}
警告的使用:
- (void)actionSheet:(UIActionSheet *)actionSheet
didDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex != [actionSheet cancelButtonIndex])
{
NSString *msg = nil;
msg = @"everything went OK.";
UIAlertView *alert = [[UIAlertView
alloc]
initWithTitle:@"Something was done"
message:msg
delegate:self
cancelButtonTitle:@"Phew!"
otherButtonTitles:nil];
[alert
show];
[alert
release];
[msg
release];
}
}
7.为按钮指定可拉伸图像
在按钮的属性检查器中将type设置为custom。
- (void)viewDidLoad {
// 控件状态为普通时,指定图像whiteButton.png
UIImage *buttonImageNormal = [UIImage
imageNamed:@"whiteButton.png"];
UIImage *stretchableButtonImageNormal = [buttonImageNormal
stretchableImageWithLeftCapWidth:12
topCapHeight:0];
[doSomethingButton
setBackgroundImage:stretchableButtonImageNormal
forState:UIControlStateNormal];
// 控件状态为选中时,指定图像blueButton.png
UIImage * buttonImagePressed = [UIImage
imageNamed:@"blueButton.png"];
UIImage * stretchableButtonImagePressed = [buttonImagePressed
stretchableImageWithLeftCapWidth:12
topCapHeight:0];
[doSomethingButton
setBackgroundImage:stretchableButtonImagePressed
forState:UIControlStateHighlighted];
[super
viewDidLoad];
}
第5章
8.
iPhone 320 * 480像素
iPad 768 * 1024像素
状态栏高度20像素
9.使用自动调整属性处理旋转
10.在旋转时重构视图
11.切换视图
(未完待续)