標籤:
1.禁用UITextField的雙擊出現複製粘貼剪下等操作有時候我們需要禁用UITextField的雙擊出現copy paste的功能,然而UITextField本身沒有直接設定禁止使用者複製粘貼剪下操作等方法,但是可以重載建立一個類繼承UITextField,然後實現canPerformAction方法,只需覆蓋canPerformAction:withSender方法就可以,canPerformAction:withSender屬於UIResponder類的。
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender { UIMenuController *menuController = [UIMenuController sharedMenuController]; if (menuController) { [UIMenuController sharedMenuController].menuVisible = NO; } return NO;} 2.如果想讓同一個控制項同時即改變位置的移動,又放大。這樣設定是無效果的
self.btn.transform = CGAffineTransformMakeTranslation(0, 100);self.btn.transform = CGAffineTransformMakeScale(1.5, 1.2);
這樣操作是建立新的transform然後賦值,給按鈕的transform,第二次賦值的會把之前賦值的給覆蓋,所以會達不到想要的效果。
解決辦法:
self.btn.transform = CGAffineTransformMakeTranslation(0, 100); // 在之前的transform情況下,繼續添加縮放的形變。self.btn.transform = CGAffineTransformScale(_btn.transform, 1.2, 1.2);
3.將UIButton添加到UILabel,UIButton不能點擊。原因: 1.UILabel是繼承UIView的,預設不能監聽點擊事件。UIButton是繼承UIControl能夠監聽點擊事件。
2.UIButton添加到UILabel,UILabel就是UIButton的父視圖,父視圖不能監聽點擊事件,自然不將事件傳遞給子視圖,UIButton也不能監聽點擊事件了。
拓展:
因為我們一般在父類裡實現的都是一些共用的屬性和方法,而在子類中具體實現子類特有的方法。
因此在UIControl實現了監聽點擊的特有方法,即繼承UIControl才能監聽點擊事件。
4.XIB的提示
Xib是用來描述視圖長什麼樣子,一個項目中允許有很多xib,因此我們需要給xib綁定一個標識,即他View中對應的class是誰,就代表描述哪個class。
Xib中owner的class是用來告訴xib中的View需要調用哪個對象的方法,就填誰。比如需要調用dog類中的方法,就填dog。
注意:在連線選擇上別連錯了,
步驟一:先考慮自己是想給視圖添加控制項了還是想給視圖添加事件
步驟二:添加控制項就跟xib中的view連線。添加一些事件就給xib中的File’s Owner 連線。
5. UIToolBar問題注意:UIToolBar中不能使用viewWithTag方法,擷取UIToolBar裡的子視圖。UIToolBar裡的子視圖都是UIBarButtonItem,而UIBarButtonItem繼承NSObject,因此不能使用viewWithTag擷取UIToolBar裡的子視圖- (UIView *)viewWithTag:(NSInteger)tag的實現原理:
- (UIView *)viewWithTag:(NSInteger)tag{ // 1.如果當前tag和當前視圖tag相同,直接返回 if (self.tag == tag) return self; // 2.如果和當前視圖tag不相同,遍曆當前視圖的所有子控制項,尋找對應的tag。 for (UIView *view in self.subviews) { // 3.如果view不是UIView類或者UIView的子類直接返回nil if (![view isKindOfClass:[UIView class]]) return nil; if (tag == view.tag) { // 4. 返回有相匹配的視圖 return view; } } // 5.如果都沒有找到,返回nil. return nil;}
6.資料模型:屬性採用的策略中除了基本類型需要用assign,字串需要用copy,其他物件類型都需要用strong。 Assign 對象銷毀了,地址還在 Weak 對象銷毀了,地址就為nil Strong 都是對象,同一個地址,一變都變 如果使用strong設定數值的時候,只是引用計數+1,並不會建立新的副本 Copy 不會跟著變 網路模型:為了避免不必要的麻煩,網路模型設定屬性的時候,可以都使用copy
7.返回的數組後面調用copy方法的原因
1.可以建立一個不可變的數組,外界無法修改
2.否則外面可以通過id或者其他的方法修改數組內容不夠安全
8.視圖繪製方法注意點
- (void)drawRect:(CGRect)rect;
如果想要調用這個方法,必須視圖在初始化的時候就設定尺寸,否則不會調用這個繪圖方法
這樣不會調用
ZYHButton *view = [[ZYHButton alloc] init];
必須在建立的時候就設定尺寸,如下:
ZYHButton *view = [[ZYHButton alloc] initWithFrame:CGRectMake(0, 0, 45, 25)];
IOS開發中經常遇到的一些問題