IOS開發中經常遇到的一些問題

來源:互聯網
上載者:User

標籤:

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開發中經常遇到的一些問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.