I os 03
- 2. 課程⼤大綱
• ⽂文字的輸⼊入 (UITextField)
• QV061:BMI 計算
• UISwitch, UISlider
• QV005:UISwitch 及 UISlider 基本⽤用法
• QV013:利⽤用三個 UISlider 改變背景⾊色
• UIView
• QV074:UIView (Container)
• 以程式語法產⽣生各種 UIView 元件
• QV075:只是擺放
• QV076:程式語⾔言的⽅方式
• Samples:UICatalog
- 8. 虛擬鍵盤不會隱藏的問題解決
要注意各個 UITextFiled
的 Did End On Exit 事件
要指定動作,以隱藏輸⼊入鍵盤
- (IBAction) doneEdit:(id)sender
{
[sender resignFirstResponder];
}
- 9. 與鍵盤按鍵有關的⼩小問題
- (IBAction) calcBMI:(id)sender
{
float h = [[textHeight text] floatValue];
float w = [textWeight.text floatValue];
float bmi = w / ((h/100)*(h/100));
display.text = [NSString stringWithFormat:@"%5.2f", bmi];
[textHeight resignFirstResponder]; 隱藏輸⼊入鍵盤
[textWeight resignFirstResponder];
}
- (IBAction) doneEdit:(id)sender
{
[sender resignFirstResponder];
}
設定鍵盤類型
- (void)viewDidLoad
{
[super viewDidLoad];
[textHeight setKeyboardType:UIKeyboardTypeNumbersAndPunctuation];
[textWeight setKeyboardType:UIKeyboardTypeNumbersAndPunctuation];
}
- 17. #import "ViewController.h"
ViewController.m
@implementation ViewController
-(IBAction)changeSlider:(id)sender
{
UISlider *thisSlider = (UISlider *)sender;
int number = (int)(thisSlider.value);
NSString *msg = [[NSString alloc] initWithFormat:@"%d", number];
messageSlider.text = msg;
}
-(IBAction)changeSwitch:(id)sender
{
UISwitch *thisSwitch = (UISwitch *)sender;
if(thisSwitch.on)
{
messageSwitch.text = @"ON";
}
else
{
messageSwitch.text = @"OFF";
}
}
@end
- 21. ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{
IBOutlet UISlider *sliderR;
IBOutlet UISlider *sliderG;
IBOutlet UISlider *sliderB;
}
@property (retain, nonatomic) IBOutlet UISlider *sliderR;
@property (retain, nonatomic) IBOutlet UISlider *sliderG;
@property (retain, nonatomic) IBOutlet UISlider *sliderB;
-(IBAction)sliderChange:(id)sender;
@end
- 22. ViewController.m
顏⾊色的值為
-(IBAction)sliderChange:(id)sender 0 到 1 之間的浮點數
{
float valueR = [sliderR value];
float valueG = [sliderG value];
float valueB = [sliderB value];
UIColor *myColor = [UIColor colorWithRed:(valueR/255.0)
green:(valueG/255.0)
blue:(valueB/255.0)
alpha: 1];
self.view.backgroundColor = myColor;
}
- 25. ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{
IBOutlet UISwitch *mySwitch;
IBOutlet UIView *myView;
IBOutlet UISlider *mySlider1, *mySlider2;
IBOutlet UILabel *myLabel1, *myLabel2;
}
- (IBAction) changeSwitch:(id)sender;
- (IBAction) changeSlider:(id)sender;
@end
將多個物件包在⼀一塊
- 27. ViewController.m (1/2)
切換 UISwitch 以控制 UIView,
會整個顯⽰示或隱藏
- (IBAction) changeSwitch:(id)sender
{
UISwitch *thisSwitch = (UISwitch *)sender;
if(thisSwitch.on)
{ 內部宣告明確類別的物
myView.hidden = NO;
} 件,取得傳⼊入的指標
else
{
myView.hidden = YES;
}
}
取得 UISwitch 的輸⼊入
xxxxx.on
(BOOL 型態)
- 28. ViewController.m (2/2)
- (IBAction) changeSlider:(id)sender
{
myLabel1.text = [NSString stringWithFormat:@"%3.1f", mySlider1.value];
myLabel2.text = [NSString stringWithFormat:@"%3.1f", mySlider2.value];
float x = 320 * mySlider1.value;
float y = 460 * (1.0-mySlider2.value);
// 因為不能改寫center.x及center.y。所以改⽅方法
mySwitch.center = CGPointMake(x, y);
}
移動 UIView 的位置
取得 UISlider 的輸⼊入
xxxxx.value
(float 型態)
- 33. ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{
UILabel *myLabel;
}
- (void) textChange:(id)sender; 會讓很多程式⽚片段使
- (void) doneEdit:(id)sender;
- (void) buttonClick:(id)sender; ⽤用,故宣告在此
- (void) sliderChange:(id)sender;
- (void) switchChange:(id)sender;
- (void) stepperChange:(id)sender;
@end
- 34. ViewController.m (1/9)
UILabel
- (void)viewDidLoad
{
****** 省略部份程式碼 ******
// 產⽣生 UILabel (注意,myLabel已定義在類別中)
myLabel = [[UILabel alloc] initWithFrame:CGRectMake(60, 30, 200, 30)];
myLabel.textAlignment = UITextAlignmentCenter;
myLabel.font = [UIFont fontWithName:@"Arial" size:20];
myLabel.backgroundColor = [UIColor clearColor];
myLabel.text = @"訊息⽂文字列";
[self.view addSubview:myLabel];
}
- 35. ViewController.m (2/9)
UIButton + UIAlert
- (void)viewDidLoad
{
****** 省略部份程式碼 ******
// 產⽣生 UIButton
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
myButton.frame = CGRectMake(30, 70, 72, 37);
[myButton setTitle:@"Click me" forState:UIControlStateNormal];
[myButton addTarget:self
action:@selector(buttonClick:)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:myButton];
UIAlertView 使⽤用
}
- (void) buttonClick:(id)sender
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"現在狀態"
message:@"按下了按鈕" delegate:self
cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
- 36. ViewController.m (3/9)
UITextField (1/2)
- (void)viewDidLoad
{
****** 省略部份程式碼 ******
// 產⽣生 UITextField
UITextField *myTextField = [[UITextField alloc] init];
myTextField.frame = CGRectMake(30, 120, 100, 31); // ⾼高(31) 為固定值
myTextField.borderStyle = UITextBorderStyleRoundedRect;
myTextField.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
myTextField.contentVerticalAlignment =
UIControlContentVerticalAlignmentCenter;
myTextField.text = @"預設內容";
myTextField.secureTextEntry = YES;
[myTextField addTarget:self action:@selector(textChange:)
forControlEvents:UIControlEventEditingChanged];
[myTextField addTarget:self action:@selector(doneEdit:)
forControlEvents:UIControlEventEditingDidEndOnExit];
[self.view addSubview:myTextField];
} 兩個事件指定
- 37. ViewController.m (4/9)
UITextField (2/2)
- (void) textChange:(id)sender
{
UITextField *thisTextField = (UITextField *)sender;
if ([thisTextField.text length] == 0)
{
myLabel.text = @"沒有輸⼊入⽂文字";
}
else
{
myLabel.text = [NSString stringWithFormat:@"⽂文字:%@",
thisTextField.text];
}
}
- (void) doneEdit:(id)sender 取得輸⼊入的內容
{
[sender resignFirstResponder];
}
隱藏虛擬鍵盤
- 38. ViewController.m (5/9)
UISlider
- (void)viewDidLoad
{
****** 省略部份程式碼 ******
// 產⽣生 UISlider
CGRect frame1 = CGRectMake(30, 170, 79, 23); // ⾼高(23) 為固定值
UISlider *mySlider = [[UISlider alloc] initWithFrame:frame1];
mySlider.minimumValue = 0.0;
mySlider.maximumValue = 100.0;
mySlider.value = 50.0;
[mySlider addTarget:self
action:@selector(sliderChange:)
forControlEvents:UIControlEventValueChanged];
[self.view addSubview:mySlider];
}
- (void) sliderChange:(id)sender
{
UISlider *thisSlider = (UISlider *)sender;
float value = thisSlider.value; 取得輸⼊入的內容
myLabel.text = [NSString stringWithFormat:@"滑桿值為:%5.2f", value];
}
- 39. UISwitch
ViewController.m (6/9)
- (void)viewDidLoad
{
****** 省略部份程式碼 ******
// 產⽣生 UISwitch
CGRect frame2 = CGRectMake(30, 220, 79, 27); // 寬(79)⾼高(27)為固定值
UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:frame2];
mySwitch.on = NO;
[mySwitch addTarget:self
action:@selector(switchChange:)
forControlEvents:UIControlEventValueChanged];
[self.view addSubview:mySwitch];
}
- (void) switchChange:(id)sender
{
UISwitch *thisSwitch = (UISwitch *)sender;
if(thisSwitch.on)
取得:開或關
{
myLabel.text = [NSString stringWithFormat:@"切換鍵為:開 (ON)"];
}
else
{
myLabel.text = [NSString stringWithFormat:@"切換鍵:關 (不是ON)"];
}
}
- 40. UIStepper iOS 5 之後提供 ViewController.m (7/9)
- (void)viewDidLoad
{
****** 省略部份程式碼 ******
// 產⽣生 UIStepper
CGRect frame3 = CGRectMake(185, 70, 94, 27); // 寬(94)⾼高(27)為固定值
UIStepper *myStepper = [[UIStepper alloc] initWithFrame:frame3];
myStepper.maximumValue = 10.0;
myStepper.minimumValue = 0.0;
myStepper.value = 5.5;
[myStepper setStepValue:0.1]; // 每次改變的量
[myStepper setContinuous:YES]; // 可以按住不放來連續變更
[myStepper setWraps:YES]; // 設定是否循環(到最⼤大值時增加數值,從最⼩小值開始)
[myStepper addTarget:self action:@selector(stepperChange:)
forControlEvents:UIControlEventValueChanged];
[self.view addSubview:myStepper];
}
- (void) stepperChange:(id)sender
{
UIStepper *thisStepper = (UIStepper *)sender;
float value = thisStepper.value; 取得輸⼊入的內容
myLabel.text = [NSString stringWithFormat:@"增減鍵的值為:%4.1f", value];
}
- 41. ViewController.m (8/9)
UIImageView
- (void)viewDidLoad
{
****** 省略部份程式碼 ******
// 產⽣生 UIImage
UIImage *myImage = [UIImage imageNamed:@"Cat.png"];
// 產⽣生 UIImageView
UIImageView *myImageView = [[UIImageView alloc] initWithImage:myImage];
myImageView.frame = CGRectMake(185, 120, 128, 128);
[self.view addSubview:myImageView];
}
需注意,圖像使⽤用包含
UIImageView (View Control)
及 UIImage (圖檔本⾝身)
- 42. ViewController.m (9/9)
UIWebView
- (void)viewDidLoad
{
****** 省略部份程式碼 ******
// 產⽣生 UIWebView
UIWebView *myWebView = [[UIWebView alloc]
initWithFrame:CGRectMake(30, 270, 270, 165)];
myWebView.scalesPageToFit = YES;
[myWebView loadRequest:
[NSURLRequest requestWithURL:
[NSURL URLWithString:@"http://www.apple.com"]]];
[self.view addSubview:myWebView];
}
此處為簡略⽤用法