// Ch4_1_More_Interface_ControlViewController.h
// Ch4-1 More Interface Control
//
// Created by jason on 2011/6/24.
// Copyright 2011 __MyCompanyName__. All rights reserved.
//
#import
#define kSwitchesSegmentIndex 0
@interface Ch4_1_More_Interface_ControlViewController : UIViewController { //使用動作表委派
UITextField *nameField; //用來給輸入name欄位
UITextField *numberField;//用來給輸入number欄位
UILabel *sliderLabel;//用來給輸出 sliderLabel 值
UISwitch *leftSwitch; //左按鈕
UISwitch *rightSwitch; //右按鈕
UIButton *doSomethingButton; // doSomething just do some thing
}
@property (nonatomic, retain) IBOutlet UITextField *nameField;
@property (nonatomic, retain) IBOutlet UITextField *numberField;
@property (nonatomic, retain) IBOutlet UILabel *sliderLabel;
@property (nonatomic, retain) IBOutlet UISwitch *leftSwitch,*rightSwitch;
@property (nonatomic, retain) IBOutlet UIButton *doSomethingButton;
-(IBAction) textFiledDoneEditing:(id) sender; //完成name輸入時要將鍵盤收回的方法
-(IBAction) backgroundTap:(id) sender;//當按到background時要將鍵盤收回的方法
-(IBAction) sliderChanged:(id) sender;//取得slider值與給值到slider label的方法
//下面這個方法會在點按分段控制項(swtich / Button )時被呼叫 因為doSomething按鈕會蓋住 switch 按鈕 用這個方法來顯示操作哪個按鈕
-(IBAction) toggleControls:(id) sender;
-(IBAction) switchChanged: (id) sender; //switch按鈕的動畫
-(IBAction) buttonPressed;
@end

// Ch4_1_More_Interface_ControlViewController.m
// Ch4-1 More Interface Control
//
// Created by jason on 2011/6/24.
// Copyright 2011 __MyCompanyName__. All rights reserved.
//
#import "Ch4_1_More_Interface_ControlViewController.h"
@implementation Ch4_1_More_Interface_ControlViewController
@synthesize nameField,numberField,sliderLabel,leftSwitch,rightSwitch,doSomethingButton;
-(IBAction) textFiledDoneEditing:(id) sender{
[sender resignFirstResponder]; //當輸入完成將控制權歸還以將鍵盤收回
}
-(IBAction) backgroundTap:(id) sender{//當使用者碰觸背景時將控制權歸還以將鍵盤收回
[nameField resignFirstResponder];
[numberField resignFirstResponder];
}
// slider bar 方法
-(IBAction) sliderChanged:(id) sender{
UISlider *slider = (UISlider *) sender;
int progressAsInt = (int)(slider.value +0.5f); //去掉小數點
NSString *newText= [[NSString alloc] initWithFormat:@"%d", progressAsInt]; // NSString化
sliderLabel.text= newText;//指定給 sliderLabel
[newText release];
}
-(IBAction) toggleControls:(id) sender{ //這個方法會在點按分段控制項(swtich / Button )時被呼叫
if([sender selectedSegmentIndex] == kSwitchesSegmentIndex) //視狀況判斷決定要隱藏開關顯示按鈕或是隱藏按鈕顯示開關
{
leftSwitch.hidden = NO; //隱藏按鈕顯示開關
rightSwitch.hidden = NO;
doSomethingButton.hidden = YES;
}else{
leftSwitch.hidden = YES;//隱藏開關顯示按鈕
rightSwitch.hidden = YES;
doSomethingButton.hidden = NO;
}
}
-(IBAction) switchChanged: (id) sender{//點選任何開關都會被呼叫
UISwitch *whichSwitch= (UISwitch *) sender;// 取得是點按到哪個開關
BOOL setting = whichSwitch.isOn; // 取得開關是要開啟或是關閉
[leftSwitch setOn: setting animated: YES]; // [ setOn: (BOOL) animated: (BOOL)] => 第一個布林參數用來判斷要開啟或關閉,第二個布林參數用來讓它有動畫效果
[rightSwitch setOn: setting animated: YES];
}
-(IBAction) buttonPressed{
//配置一個代表動作表UIActionSheet的物件
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Are you sure?" // 標題
delegate:self //將self當委派參數傳送
cancelButtonTitle:@"No Way!" //加入取消按鍵
destructiveButtonTitle:@"Yes, I'm sure!" //破壞性按鍵
otherButtonTitles:nil]; //如果還要其他按鍵可以這樣 otherButtonTitle: @"Bar", @"Foo", nil];
[actionSheet showInView:self.view];// 建立完後就顯示出來 self.view = [self view]
[actionSheet release];//釋放它
}
//找出是按下動作表的哪個按鈕
-(void) actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger) buttonIndex //因為剛剛以self做為回傳值,所以當委派開始就會啟動這個方法
{
// cancelButtonIndex 屬性是表示是不是按下取消按鈕
if(buttonIndex!=[actionSheet cancelButtonIndex])// 如果不是取消按鈕就是破壞性按鈕摟
{
NSString *msg=nil;
if(nameField.text.length > 0)//跟使用者講幾句話
msg=[[NSString alloc] initWithFormat:@"You can breathe easy, %@, everything went OK.", nameField.text];
else
msg = @"You canbreathe easy, everything went OK.";
//建立警示物件
UIAlertView *alert=[[UIAlertView alloc]
initWithTitle:@"Something DONE" //標題
message: msg //剛剛做的訊息
delegate: self
cancelButtonTitle:@"Phew!"
otherButtonTitles:nil];
[alert show];
[alert release];
[msg release];
}
}
// 覆寫Override viewDidLoad 將手指移過doSomething按鈕時,將白色按鈕圖案改為藍色按鈕
-(void) viewDidLoad{
UIImage *buttonImageNormal = [UIImage imageNamed:@"whiteButton.png"]; //宣告一個物件 將whiteButton.png指定給他
UIImage *stretchableButtonImageNormal= [buttonImageNormal stretchableImageWithLeftCapWidth:12//將圖案伸展開來但是端點要維持原本的圓弧狀
topCapHeight:0];//
[doSomethingButton setBackgroundImage:stretchableButtonImageNormal
forState:UIControlStateNormal]; //將它指定為按鈕的Normal狀態下的background
UIImage *buttonImagePressed = [UIImage imageNamed:@"blueButton.png"];
UIImage *stretchableButtonImagePressed= [buttonImagePressed stretchableImageWithLeftCapWidth:12
topCapHeight:0];
[doSomethingButton setBackgroundImage:stretchableButtonImagePressed
forState:UIControlStateHighlighted]; //將它指定為按鈕Highlight狀態下的background
/*
iOS控制項 有四種狀態
-Normal: 預設狀態,若不在其他三個狀態的話就是這個狀態了
-Highlighted: 使用中, 以按鈕而言就是手指頭放在它上面
-Disable: 關閉停用 ,Interface Builder中可以設定
-selected: 只有部分控制項支援, 有點像Highlight但是他維持在這個狀態即使使用者沒有使用它了
*/
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload { //卸載所有參數的記憶體位置
self.nameField=nil;
self.numberField=nil;
self.sliderLabel=nil;
self.leftSwitch=nil;
self.rightSwitch=nil;
self.doSomethingButton=nil;
[super viewDidUnload];
}
- (void)dealloc {
[nameField release];
[numberField release];
[sliderLabel release];
[leftSwitch release];
[rightSwitch release];
[doSomethingButton release];
[super dealloc];
}
@end