最近找到了一個可以接觸ios開發的職位,可以系統的學習和練習了。先從最基本的開始:
一、獲取控制元件的兩種方式
1)第一種,也是經常使用的一種,通過IBOutlet方式。直接按住control鍵,將控制元件和ViewController建立聯絡,然後就可以通過Controller的屬性來獲取控制元件
2)第二種,通過設定控制元件的tag屬性。
先設定控制元件的tag屬性為一個integer型別的值,然後在程式碼中獲取
1 UILabel *lbl2 = (UILabel*)[self.view viewWithTag:2];
二、事件處理的三種方式
1)第一種,最常使用的是通過IBAction的方式
2)第二種,通過程式碼設定事件處理方法
在viewDidLoad事件中呼叫addTarget:action:forControlEvents來新增處理事件,
addTarget:表明以改物件的某個方法來處理事件,例如當前controller
action:代表處理事件的方法
forControlEvents:要處理的事件型別,一個UIControlEvents的列舉值
例子:
- (void) viewDidLoad { [super viewDidLoad]; NSLog(@"頁面載入完成"); AppDelegate *ad = [UIApplication sharedApplication].delegate; NSLog(@"列印代理類的lycname屬性%@", ad.LycName); //給控制元件新增事件 [self.btnMeet addTarget:self action:@selector(btnMeet_click:) forControlEvents:UIControlEventTouchUpInside]; } -(void) btnMeet_click:(UIButton *) sender { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"我是遇見按鈕" delegate:nil cancelButtonTitle:@"確定" otherButtonTitles:nil, nil]; [alertView show]; }
3)通過委託物件來處理事件
上兩種事件處理針對的都是主動控制元件,即繼承自UIControl:UIView的控制元件。
而如果是UITextView這種控制元件,是繼承自UIScrollView:UIView,所以它本身並不具備一些常見事件,在這種情況下,就需要委託物件來處理特殊事件。
例如剛剛提到的UITextView控制元件,它的預設事件有:
-textViewShouldBeginEditing:將要開始編輯時觸發
-textViewDidBeginEditing:開始編輯後觸發
-textViewShouldEndEditing:將要結束編輯時觸發
-textViewDidEndEditing:結束編輯後觸發
-textViewDidChange:文字內容發生改變後觸發
要實現上面的事件處理,必須要實現UITextViewDelegate協議
1 @interface UITextFieldViewController : UIViewController<UITextViewDelegate> 2 //屬性 3 @property (strong,nonatomic) UIBarButtonItem *doneRightBI;//右側導航條按鈕-完成 4 @property (strong,nonatomic) UIBarButtonItem *commitRightBI;//右側導航條按鈕-提交 5 6 @end
@implementation UITextFieldViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.txtContent.delegate = self; if (self.navigationItem != nil) { [self.navigationItem setTitle:@"文字框演示"]; //初始化右側導航按鈕-提交按鈕 UIBarButtonItem *rightBtn = [[UIBarButtonItem alloc] initWithTitle:@"提交" style:UIBarButtonItemStyleDone target:self action:@selector(registerUserHandler)]; self.commitRightBI = rightBtn; //設定當前右側按鈕為提交按鈕 [self.navigationItem setRightBarButtonItem:self.commitRightBI]; //初始化右側導航按鈕-完成按鈕 UIBarButtonItem *rightDoneBtn = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(resignFirstReponderHandler)]; self.doneRightBI = rightDoneBtn; } } //上面的按鈕處理事件(registerUserHandler、resignFirstReponderHandler)就不列出來了 @end
1 //文字框開始編輯時觸發 2 -(void) textViewDidBeginEditing:(UITextView *)textView 3 { 4 NSLog(@"開始編輯本文域"); 5 if (self.navigationItem != nil) 6 { 7 [self.navigationItem setRightBarButtonItem:self.doneRightBI animated:NO]; 8 } 9 } 10 11 //文字框結束編輯時觸發 12 -(void) textViewDidEndEditing:(UITextView *)textView 13 { 14 NSLog(@"結束編輯本文域"); 15 [self resignFirstReponderHandler]; 16 if (self.navigationItem != nil) 17 { 18 [self.navigationItem setRightBarButtonItem:self.commitRightBI animated:NO]; 19 } 20 }
這樣,通過上面的程式碼,當UITextView在不同狀態時,右側的導航按鈕也會相應的改變
三、通過程式碼建立控制元件
1、建立UI控制元件
2、呼叫addSubView將建立的控制元件新增到其他view中
3、多次呼叫控制元件的setter方法,設定外觀、行為等
例子:
//用程式碼建立一個控制元件 UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; //設定button的大小 button.frame=CGRectMake(120, 100, 120, 40); [button setTitle:@"我是程式碼建立的" forState:UIControlStateNormal]; [self.view addSubview:button];