您好,登录后才能下订单哦!
首先是熟悉 Xcode 界面。因为这本书的 Xcode 版本并不是最新版,而我的 MacBook 上已经装了 Xcode 5.0,所以带来了一些不便。Xcode 5.0 在创建 Single View Application 时会默认创建 Storyboard ,而这本书上刚开始是先用 xib 来做界面。刚开始我把 Storyboard 当做 xib 来用倒是影响不大,但是到了要连线的时候,书上说的 File's Owner 我就找不到了,而且到了后面做多界面的应用时就一头雾水。其他的操作问题不大,花几天时间适应之后就好了。不过由于从 Windows 转到 Mac OS X 的时间并不久,我还不适应 Mac OS X 的快捷键操作,甚至连快捷键的图标都不一定认得 ⊙﹏⊙ 。
【这不是一篇技术博客】
接下来就进入了基本交互的学习。我按照书上的方法写了一个这样的应用程序:
1.关闭键盘的方式
首先是两个 Text Field 和两个 Label 。这个并没有多少技术含量,Label 双击即可改文字,而 Text Field 里灰色的文字则是在 Attributes inspector 里的 Placeholder 中更改。同时"Number:"对应的 Text Field 的 Keyboard 改为 Number Pad 。 Bulid 之后点击 Text Field 当然会弹出键盘,而下面我要实现的是点击键盘右下角的 Done 关闭键盘,以及点击 Text Field 以外的位置关闭键盘。
首先在ViewController.h里加入:
- (IBAction) textFieldDoneEditing:(id)sender; - (IBAction) backgroundTap:(id)sender;
然后在ViewController.m里写这两个方法的实现:
- (IBAction) textFieldDoneEditing:(id)sender { [sender resignFirstResponder]; } - (IBAction) backgroundTap:(id)sender { [_nameField resignFirstResponder]; [_numberField resignFirstResponder]; }
添加完代码之后还要打开 Connection inspector ,把 Did End On Exit 连到 File's Owner 上。
2.数值调节
接下来是中间那个 Label 和 Slider 。这两个控件是用来实现将 Slider 的 Attributes inspector 中,Maximum 改为100,Minimum 最小改为0,Current 改为50。接下来是创建输入输出口。打开 Assistant editor ,按住 control 将 Slider 连线至 ViewController.h 的 @interface 与 @end 间的空白处,弹出窗口后类型选择 Action ,命名为 sliderChanged 。用同样的方法操作 Label ,但是直接使用默认设置 IBOutlet ,命名为 sliderLabel 。在 ViewController.m 中的相应位置加入如下代码:
-(IBAction)sliderChanged:(id)sender{ UISlider *slider =(UISlider *)sender; int progressAsInt = (int)roundf(slider.value); _sliderLabel.text = [NSString stringWithFormat:@"%d", progressAsInt]; }
其实在这里我发现(并体验)了一个 Objective-C 的特性。凡是在 @interface 里 @property 过的对象,可以使用_+对象名或者self.+对象名在各个方法的实现中调用。而@synthesize可以任意更改名字以便调用,但是在这本书里比较少用。如:
@synthesize a=_a;
3.简易的分栏
接下来是下面的 Segmented Control 。同时添加两个 Switch 和一个 Button 。把 Segmented Control 的两栏分别改成"Switches"和“Button”,Button 名改为“Do Something”。在 Segmented Control 上现在需要实现的是:点击“Switches”时显示两个 Switch 并隐藏 Button,点击“Button”时显示 Button 并隐藏两个 Switch。先在 ViewController.h 中创建 Segmented Control 的 Action,命名为“toggleControls”。然后在 ViewController.m 的相应位置加入如下代码:
- (IBAction)toggleControls:(id)sender { if([sender selectedSegmentIndex] == 0){ _leftSwitches.hidden = NO; _rightSwitches.hidden = NO; _doSomethingButton.hidden = YES; } else{ _leftSwitches.hidden = YES; _rightSwitches.hidden = YES; _doSomethingButton.hidden = NO; } }
4.开关联动
接下来要实现的是两个 Switch 的“联动”,即同时开同时关。分别选中两个 Switch,在 ViewController.h 中创建两个输出口(IBOutlet),分别命名为“leftSwitches”和“rightSwitches”。左边的开关用拖动的方式再添加一个名为“switchChanged:”的方法。在 ViewController.m 中添加如下内容:
- (IBAction)switchChanged:(id)sender { UISwitch *whichSwitch = (UISwitch *)sender; BOOL setting = whichSwitch.isOn; [_leftSwitches setOn:setting animated:YES]; [_rightSwitches setOn:setting animated:YES]; }
5.操作表和警报
这两个东西其实应该叫“Action Sheet”和“Alert View”会显得不那么陌生。我们就以上面已经创建的名为“Do Something”的 Button 为 Action Sheet 的触发按钮。在 ViewController.h 中创建一个此 Button 的 Action 方法,命名为“buttonPressed”。该方法的实现如下:
- (IBAction)buttonPressed:(id)sender { UIActionSheet *myActionSheet=[[UIActionSheet alloc]initWithTitle:@"标题" delegate:self cancelButtonTitle:@"取消键" destructiveButtonTitle:@"毁灭键" otherButtonTitles:@"额外加键", nil]; [myActionSheet showInView:self.view]; }
上面这段代码中的蓝色字可以任意更改成你喜欢的文字。效果如下:
接下来我们把“毁灭键”作为 Alert View 的触发按钮。只需要在 ViewController.m 中加入如下代码即可:
-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex { if (buttonIndex==[actionSheet destructiveButtonIndex]){ UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"AlertView的标题" message:@"我是一个AlertView" delegate:self cancelButtonTitle:@"取消键" otherButtonTitles:@"随手加", nil]; [myAlertView show]; } }
效果如下:
当然你也可以自己做一做别的按钮的触发效果来玩。
【这不是一篇技术博客】
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。