iOS基礎 - 完善鍵盤處理

1.完善鍵盤處理

步驟一:建立一個數組,裏面裝着全部的文本框。

步驟二:監聽全部文本框的開始編輯,設置全部文本框的代理爲控制器

1.設置生日和城市不容許鍵盤輸入設計模式

2.當開始編輯的時候調用,用一個成員屬性,記錄住當前聚焦的文本框數組

步驟三:完成工具條的代理方法

步驟四:判斷工具條上的按鈕是否能點擊

步驟五:將文本框數組按照y值排序

步驟六:監聽系統發出鍵盤滾動通知

步驟七:當鍵盤擋住文本框將視圖往上移

步驟八:移除監聽通知

2.一切控件的封裝最好繼承UIView

3.項目中常見文件

1.main 程序的入口app

2.pch 當項目中有些宏或者經常使用的東西放在pch,公司中打開一個項目先應該看的文件。ide

4.屏幕適配:視網膜會自動加載@2x

5.程序生命週期

 

 

 

 

1、UITextField的代理方法函數

#pragma mark 當文本框開始編輯的時候調用---開始聚焦工具

- (void)textFieldDidBeginEditing:(UITextField *)textField字體

 

2、排序動畫

1.可變數組的排序(NSMutableArrayatom

* sortUsingComparator:方法調完,會直接改變array這個可變數組內部對象的順序spa

[array sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {}];

排序過程當中會不斷地調用block,傳入兩個須要比較的對象:id obj1, id obj2

* block必須有返回值:NSComparisonResult

* NSComparisonResult3種取值:

NSOrderedAscending = -1L, // 右邊的對象排後面

NSOrderedSame, // 同樣

NSOrderedDescending // 左邊的對象排後面

2.不可變數組的排序(NSArray

* sortedArrayUsingComparator:方法並不會改變array數組內部的順序

* sortedArrayUsingComparator:方法會返回一個新的已經排好序的數組sortedArray

NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {}];

 

3、監聽鍵盤的顯示和隱藏

1.監聽鍵盤通知

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];

// 1.顯示鍵盤

[center addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

// 2.隱藏鍵盤

[center addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

2.移除鍵盤通知(非ARC必須寫)

- (void)dealloc

{

    [[NSNotificationCenter defaultCenter] removeObserver:self];

}

3.注意點:當彈出一個新的鍵盤時,纔會發出顯示鍵盤的通知

 

4、UI控件常見屬性總結

1.UIView

// 若是userInteractionEnabled=NO,不能跟用戶交互

@property(nonatomic,getter=isUserInteractionEnabled) BOOL userInteractionEnabled;

// 控件的標記(父控件經過標記能夠找到對應的子控件)

@property(nonatomic) NSInteger tag;

// 控件的位置和尺寸(以父控件的左上角爲座標原點)

@property(nonatomic) CGRect            frame;

// 控件的位置和尺寸(以控件自己的左上角爲座標原點)

@property(nonatomic) CGRect            bounds;

// 控件的中點位置(以父控件的左上角爲座標原點)

@property(nonatomic) CGPoint           center;

// 形變屬性:旋轉、縮放、平移

@property(nonatomic) CGAffineTransform transform;

// 父控件

@property(nonatomic,readonly) UIView       *superview;

// 全部的子控件

@property(nonatomic,readonly,copy) NSArray *subviews;

2.UILabel

// 顯示的文字

@property(nonatomic,copy)   NSString           *text;

// 字體

@property(nonatomic,retain) UIFont             *font;

// 文字顏色

@property(nonatomic,retain) UIColor            *textColor;

// 文字的排列方式(左對齊、居中、右對齊)

@property(nonatomic)        NSTextAlignment    textAlignment;

// 設置行數(行數==0表明自動換行)

@property(nonatomic) NSInteger numberOfLines;

3.UIImageView

// 顯示的圖片

@property(nonatomic,retain) UIImage *image;

// 設置序列幀圖片數組(按順序播放animationImages數組中的圖片)

@property(nonatomic,copy) NSArray *animationImages;

// 序列幀動畫的持續時間

@property(nonatomic) NSTimeInterval animationDuration;

// 序列幀動畫的執行字數(默認是0,表明無限循環)

@property(nonatomic) NSInteger      animationRepeatCount;

4.UIScrollView

// 表示UIScrollView所滾動的位置

@property(nonatomic) CGPoint contentOffset;

// 表示UIScrollView的內容尺寸(能滾動的範圍)

@property(nonatomic)         CGSize                       contentSize;

// 增長UIScrollView額外的邊緣滾動區域

@property(nonatomic)         UIEdgeInsets                 contentInset;

// 代理

@property(nonatomic,assign) id<UIScrollViewDelegate>      delegate;

5.UITableView

6.UIPickerView

7.UIControl

// 是否可用

@property(nonatomic,getter=isEnabled) BOOL enabled;

// 自動擁有不少種狀態

// 能夠經過下面的方法來監聽控件內部的一些事件:點擊、值改變

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;

1> UIDatePicker

// 設置模式(類型)

@property(nonatomic) UIDatePickerMode datePickerMode;   

// 設置區域(zh_CN表明天朝)

@property(nonatomic,retain) NSLocale      *locale;

// 設置當前時間

@property(nonatomic,retain) NSDate        *date;

// UIDatePicker內部顯示的日期更改了,就會觸發值改變事件

2> UISwitch

// 控制開關狀態

@property(nonatomic,getter=isOn) BOOL on;

- (void)setOn:(BOOL)on animated:(BOOL)animated;

// UISwitch內部開關狀態更改了,就會觸發值改變事件

3> UISegmentControl

// 一共有多少塊區域

@property(nonatomic,readonly) NSUInteger numberOfSegments;

// 當前選中區域的位置

@property(nonatomic) NSInteger selectedSegmentIndex;

// UISegmentControl內部選中的區域更改了,就會觸發值改變事件

4> UISlider

// 設置當前的進度值

@property(nonatomic) float value;

// 設置最小的進度值

@property(nonatomic) float minimumValue;

// 設置最大的進度值

@property(nonatomic) float maximumValue;

// UISlider內部的進度值更改了,就會觸發值改變事件

5> UIButton

// 快速建立一個按鈕

+ (id)buttonWithType:(UIButtonType)buttonType;

// 設置按鈕的內邊距

@property(nonatomic) UIEdgeInsets contentEdgeInsets;

// 按鈕內部的標籤控件

@property(nonatomic,readonly,retain) UILabel     *titleLabel;

// 按鈕內部的圖片控件

@property(nonatomic,readonly,retain) UIImageView *imageView;

// 設置內部titleLabel顯示的文字

- (void)setTitle:(NSString *)title forState:(UIControlState)state;

// 設置內部titleLabel的文字顏色

- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state;

// 設置內部imageView顯示的圖片

- (void)setImage:(UIImage *)image forState:(UIControlState)state;

// 設置背景圖片

- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state;

- (NSString *)titleForState:(UIControlState)state;

- (UIColor *)titleColorForState:(UIControlState)state;

- (UIImage *)imageForState:(UIControlState)state;

- (UIImage *)backgroundImageForState:(UIControlState)state;

6> UITextField(經過delegate監聽內部的事件)

8.UIAlertView

// 建立一個UIAlertView對話框

/*

 title : 對話框標題

 message : 對話框中間顯示的文字內容

 cancelButtonTitle : 取消按鈕的文字

 otherButtonTitles : 其餘按鈕的文字(設置多個)

 delegate : 用來監聽alertView上面按鈕的點擊

 */

- (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id /*<UIAlertViewDelegate>*/)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION;

// 顯示

- (void)show;

 

5、項目常見文件

1.main.m

裏面有一個程序的入口:main函數

2.Prefix.pch文件

* pch文件中的內容 能被 項目中的其餘任何文件 共享\包含\訪問

若是定義的內容只用在OC環境中,就必須定義在#ifdef __OBJC__#endif之間

3.發佈程序的時候自動去除打印語句

#ifdef DEBUG

#define MyLog(...)  NSLog(__VA_ARGS__)

#else

#define MyLog(...)

#endif

4.InfoPlist.strings

app的本地化相關(多語言版本)

5.Info.plist

1> 全局配置文件

2> 新舊配置文件的對比

Xcode3的時候,全局配置文件名:Info.plist

Xcode4開始,全局配置文件名:項目名-Info.plist

3> 項目中自定義的plist文件中不要包含info這個字眼

4> 常見的配置

Bundle display name : 軟件名稱

Bundle identifier : app的惟一標識

Bundle versions string, short : 軟件版本號(更新app

Main storyboard file base name : 設置程序一啓動就加載的storyboard文件

 

6、屏幕適配

1.爲非視網膜\視網膜屏幕分別準備2份圖片,好比:

1> 非視網膜 abc.png

2> 視網膜 abc@2x.png

2.程序啓動圖片

程序啓動過程當中會自動全屏顯示Default.png圖片,程序啓動完畢就會隱藏Default.png圖片

* Default.png 非視網膜

* Default@2x.png 3.5英寸的視網膜

* Default-568h@2x.png 4英寸的視網膜

3.軟件圖標

系統會自動把Icon.png當作應用程序的軟件圖標

關於軟件的圖標規格,能夠搜索官方文檔:app icon

 

7、UIApplication

1.簡介

1> 整個應用程序的象徵,一個應用程序就一個UIApplication對象,使用了單例設計模式

2> 經過[UIApplication sharedApplication]訪問這個單例對象

2.常見用法

1> 設置圖標右上角的紅色提示數字

app.applicationIconBadgeNumber = 10;

2> 設置狀態欄的樣式

app.statusBarStyle = UIStatusBarStyleBlackOpaque;

3> 控制狀態欄的顯示和隱藏

app.statusBarHidden = YES;

4> 顯示狀態欄上面的圈圈

app.networkActivityIndicatorVisible = YES;

5> 打開外部資源

打開網頁

[app openURL:[NSURL URLWithString:@http://www.baidu.com]];

打電話

[app openURL:[NSURL URLWithString:@"tel://10086"]];

發短信

[app openURL:[NSURL URLWithString:@"sms://10086"]];

6> 代理屬性(當應用程序發生了一些系統級別的事件,就會通知代理,交給代理去處理)

@property(nonatomic,assign) id<UIApplicationDelegate> delegate;

 

8、UIApplicationDelegate的代理方法

#pragma mark  程序加載完畢(啓動完畢)就會調用一次

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

#pragma mark 應用程序失去焦點的時候調用(一個app若是失去焦點,就不能跟用戶進行交互)

- (void)applicationWillResignActive:(UIApplication *)application

#pragma mark 程序進入後臺就會調用

- (void)applicationDidEnterBackground:(UIApplication *)application

#pragma mark 程序即將進入前臺的時候調用

- (void)applicationWillEnterForeground:(UIApplication *)application

#pragma mark 應用程序得到焦點的時候調用(一個app只有得到焦點以後才能跟用戶進行交互)

- (void)applicationDidBecomeActive:(UIApplication *)application

#pragma mark 程序即將被關閉的時候可能會被調用

- (void)applicationWillTerminate:(UIApplication *)application

#pragma mark 程序接收到內存警告都會調用

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application

相關文章
相關標籤/搜索