2014-02-05 43 views
5

這是我的代碼:爲什麼UITextField becomeFirstResponder返回NO?

while (true) { 
    if ([identificationField becomeFirstResponder]) { 

     NSLog(@"finally!"); 
     break; 
    } 
    else{ 
     if ([identificationField canBecomeFirstResponder]) { 
      NSLog(@"can"); 
     } 
     else{ 
      NSLog(@"cannot"); 
     } 
     NSLog(@"%@", identificationField); 
     NSLog(@"dadgum!!"); 

    } 
} 

這是它記錄:

2014-02-05 11:33:54.253 Store Test[22488:70b] can 

    2014-02-05 11:33:54.254 Store Test[22488:70b] <UITextField: 
    0xb5c89a0; frame = (10 1; 300 43); text = ''; clipsToBounds = YES; 
    opaque = NO; autoresize = TM+BM; gestureRecognizers = <NSArray: 
    0xb5cc7b0>; layer = <CALayer: 0xb5c8b40>> 

    2014-02-05 11:33:54.254 Store Test[22488:70b] dadgum!! 

有誰知道爲什麼它可能這樣做嗎?正如你所看到的,文本字段可以成爲第一響應者,但它不會。

回答

1

您可能有其他元素正在阻止它。需要更多地瞭解您的項目才能真正回答確切的問題。

但是,這裏有一個可能您具有委託方法

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{ 
return NO; 
} 

這將意味着它不會辭職第一響應另一個文本框。

+0

我怎樣才能找出當前的第一響應者是什麼?我點擊一個按鈕來獲取我使用在「修改內部」過程中調用的IBAction發佈的代碼,所以我不知道除非UIButton不會辭職,否則會是什麼問題。 – user1654889

+0

您必須仔細檢查所有視圖,並手動詢問他們是否爲firstResponder。你不想這樣做。 – AppHandwerker

+0

我有其他選擇嗎? – user1654889

0

canBecomeFirstResponder的呼叫只檢查接收者是否可以自己成爲第一響應者。

becomeFirstResponder的呼叫將失敗並返回NO如果接收者不能成爲第一響應者或者當前第一響應者不能辭職。

+0

我怎樣才能找出當前的第一響應者是什麼?我點擊一個按鈕來獲取我使用在「修改內部」過程中調用的IBAction發佈的代碼,所以我不知道除非UIButton不會辭職,否則會是什麼問題。 – user1654889

0

無論已經是第一響應者可以拒絕放棄第一響應者狀態。在這種情況下,您的UITextField不會成爲第一響應者。所以你應該確保已經是第一響應者的人不會拒絕放棄這種狀態。

編輯:

你不會希望在提交到應用商店中的應用程序要離開這一點,但這裏有一個使用私有API來確定當前的第一響應一些代碼:

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow]; 
UIView *firstResponder = [keyWindow performSelector:@selector(firstResponder)]; 

你可以用它來查看第一響應者是什麼,這可能會幫助你找出爲什麼你不能辭職,如果這確實是問題。

+0

我怎樣才能找出當前的第一響應者是什麼?我點擊一個按鈕來獲取我使用在「修改內部」過程中調用的IBAction發佈的代碼,所以我不知道除非UIButton不會辭職,否則會是什麼問題。 – user1654889

+0

我目前遇到這個問題,它變得太多了,所以我會推遲它..但是這看起來像一個非常好的領先,但firstResponder返回'無'!在下一行代碼中,textField拒絕成爲第一響應者。我希望我可以進入代碼... – dave

5

你的identificationField是否在UIView層次結構中?如果它沒有添加到窗口並顯示它不能成爲第一響應者。

+1

當成爲第一響應者(例如,重新加載保存該文本字段的「UITableView」或「UICollectionView」)時,文本字段從視圖/窗口層次結構中簡單地移除時也會發生這種情況。 –

3

如果userInteractionEnabled屬性爲NO,我剛剛發現,則UITextField也將拒絕成爲第一響應者。在接受第一響應者狀態之前,我必須明確地在文本字段上重新啓用用戶交互。

另外值得注意的是,你可以強制任何當前有第一響應者狀態的元素通過在包含當前第一響應者的任何超級視圖上調用[UIView endEditing:YES]來放棄它。

+1

另外,如果isEnabled == false,UITextField將拒絕顯示鍵盤 – SevenDays

相關問題